Compare commits

...

22 Commits

Author SHA1 Message Date
Tiejun Zhou
2aa19f3de0 Release 6.2.1 on 08 Mar 2023. Expand to see details.
cee19603d Include tx_user.h conditionally.
e40e08007 Update owners
d69641273 Update release date and version
394aee52f Add tx_user.h to GNU port assembly files
5cca2ddd0 RISC-V 64 bit port for Microchip
e0f2c373c Link Winmm.lib that required by the high-resolution timer.
6af472a68 Update Win32 port with high resolution timer.
aea7b556a Add DMB ISH barrier inst in ARMv8-A SMP scheduler
19091a262 Add .section .preamble to m3 m4 m7 module ports
ced60e1b7 Add missing parenthesis in ports assembly file
309dc77ca Modules Cortex-A7 IAR new port
c752a4063 Modules Cortex-A7 GNU new port
dc224b90f Fix race condition in tx_thread_wait_abort and update regression test
6e261f5b7 create threadx cmsis-pack
2023-03-08 08:26:22 +00:00
Liya Du
745395d6a2 Update LICENSED-HARDWARE.txt 2023-02-10 13:47:51 -08:00
Liya Du
9bf9fbd86f Update LICENSED-HARDWARE.txt
Add new NXP and Renesas series.
2023-02-10 13:47:29 -08:00
Scott Larson
37f6d0b39c Update on 18 Jan 2023. Expand to see details.
9c3acb6ce armv8-m compile time FPU fix
37daa35e7 added tx_trace.h include to module stop.c
39824289f Remove internal deprecated files.
fe2f80f43 Add a notice for not released file.
7fdd3782a Upgrade to the latest Container Images.
2023-01-18 08:39:40 +00:00
Scott Larson
4e62226eea Update on 16 Dec 2022. Expand to see details.
b5d5df511 #include tx_user.h in assembly files for cortex-m ports
33e04e3d5 initial port of MIPS SMP for GHS and GNU
2eda2c17d capitalize extensions for M23 asm files
21c354ccb Fix armv7-m MPU settings for corner case, unify txm_module_port.h files
4a1ff93f9 remove uneeded include for ac6
c823e91ff update riscv iar example for latest iar tools
5559d185d check module stack for overlap (not kernel stack)
efa9ce7b7 apply patch from mobileye to fix time slice processing
75fdcb722 Updated copy_armv7_cm.yml
de04b9904 initialize unused MPU settings so that aliasing will work
79b317b60 add config directory to IAR RISC-V port in order to use simulator
2022-12-16 08:16:32 +00:00
Scott Larson
b42c5acd8b update IAR RISC-V example 2022-11-17 10:33:54 -08:00
Liya Du
35a301ad3b Update issue templates 2022-11-15 21:03:59 -08:00
Liya Du
e23b09fe0b Update issue templates 2022-11-15 20:48:09 -08:00
Liya Du
aea1a3d8f9 Update issue templates 2022-11-15 20:44:48 -08:00
Scott Larson
ee892502ec add 'config' directory to risc-v iar to support simulator 2022-11-02 08:32:02 -07:00
Tiejun Zhou
3e8e85cdc1 Release 6.2.0 2022-10-26 23:41:13 +00:00
Scott Larson
b871c33620 Merge pull request #206 from azure-rtos/JideshMSFT-fix-cortex_m4-example_build
Delete cortexm_crt0.s and tx_simulator_startup.s which were removed from the latest release
2022-07-29 13:00:47 -07:00
JideshMSFT
b6fb0b8e09 Delete tx_simulator_startup.s 2022-07-29 12:51:43 -07:00
JideshMSFT
35cfbfbd58 Delete cortexm_crt0.s 2022-07-29 12:48:58 -07:00
Yuxin Zhou
8c3c08f108 Release 6.1.12 2022-07-26 02:04:40 +00:00
Scott Larson
54cda6ee9e Add Cortex M55 and M85 to ports 2022-07-07 11:42:14 -07:00
Liya Du
83b57acde9 Fix broken link for licensing 2022-06-13 12:26:11 -07:00
TiejunZhou
e11c166a40 Merge pull request #187 from azure-rtos/tizho/rx_update
Import RX port update for 6.1.11 release.
2022-04-26 14:21:38 +08:00
Tiejun Zhou
408f9fa1b7 Import RX port update for 6.1.11 release. 2022-04-26 14:19:28 +08:00
Yuxin Zhou
cef9cb22a5 Release 6.1.11 2022-04-20 05:07:02 +00:00
Liya Du
f851772ce0 Update aka link for the licensing ask page 2022-03-29 13:50:57 -07:00
Liya Du
cd4e736a44 Add links to LTS and TUV information
In readme
2022-03-16 16:11:19 -07:00
2040 changed files with 194225 additions and 117431 deletions

35
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,35 @@
---
name: Bug report
about: Create a report to help us improve Azure RTOS.
title: ''
labels: bug, hardware
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
Please also mention any information which could help others to understand
the problem you're facing:
- What target device are you using?
- Which version of Azure RTOS?
- What toolchain and environment?
- What have you tried to diagnose or workaround this issue?
**To Reproduce**
Steps to reproduce the behavior:
1. Build my project in IAR Workbench.
1. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Impact**
What impact does this issue have on your progress (e.g., annoyance, showstopper)
**Logs and console output**
If applicable, add console logs or other types of debug information like Wireshark capture as `.zip` file.
**Additional context**
Add any other context about the problem here.

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea or enhancement to existing feature for Azure RTOS.
title: ''
labels: feature
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@@ -0,0 +1,19 @@
---
name: Hardware or architecture support
about: Suggest adding hardware or new architecture support.
title: ''
labels: ''
assignees: ''
---
**Is this request related to a particular hardware platform, SoC, board? Please describe.**
Describe in details the hardware support being requested and why this support benefits Azure RTOS.
**Describe why you are asking for this support?**
Describe why you are asking for this support.
If this is a new board or SoC, please state whether you are willing to maintain the Azure RTOS support together with you.
**Additional context**
Add any other context or graphics (drag-and-drop an image) about the hardware here.

View File

@@ -31,8 +31,17 @@ endif()
# Pick up the common stuff
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/common)
# Define the FreeRTOS adaptation layer
add_library(freertos-threadx EXCLUDE_FROM_ALL)
target_include_directories(freertos-threadx
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/utility/rtos_compatibility_layers/FreeRTOS
)
target_sources(freertos-threadx
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/utility/rtos_compatibility_layers/FreeRTOS/tx_freertos.c
)
target_link_libraries(freertos-threadx PUBLIC threadx)
# If the user provided an override, copy it to the custom directory
if (NOT TX_USER_FILE)

View File

@@ -1,6 +1,6 @@
LICENSED HARDWARE LIST
Last Updated: 2021-04-01
Last Updated: 2023-02-10
Microsoft has entered into OEM Agreements with manufacturers of the following
microprocessors and microcontrollers (the “hardware”) to enable those
@@ -31,14 +31,14 @@ NXP:
i.MX RT10xx and RT116x/7x series crossover MCUs
LPC5500 series
MCX N series
Renesas:
Synergy Platform
RX Family of MCUs
RA Family of MCUs
RZ Family of MPUs
RZ/A, RZ/N and RZ/T Family of MPUs
--------------------------------------------------------------------------------

311
README.md
View File

@@ -1,115 +1,236 @@
![cortex_m0](https://github.com/azure-rtos/threadx/workflows/cortex_m0/badge.svg)
![cortex_m3](https://github.com/azure-rtos/threadx/workflows/cortex_m3/badge.svg)
![cortex_m4](https://github.com/azure-rtos/threadx/workflows/cortex_m4/badge.svg)
![cortex_m7](https://github.com/azure-rtos/threadx/workflows/cortex_m7/badge.svg)
# Azure RTOS ThreadX
This advanced real-time operating system (RTOS) is designed specifically for deeply embedded applications. Among the multiple benefits it provides are advanced scheduling facilities, message passing, interrupt management, and messaging services. Azure RTOS ThreadX has many advanced features, including picokernel architecture, preemption threshold, event chaining, and a rich set of system services.
## Documentation
Here are the key features and modules of ThreadX:
Documentation for this library can be found here: http://docs.microsoft.com/azure/rtos/threadx
![ThreadX Key Features](./docs/threadx-features.png)
## Getting Started
Azure RTOS has been integrated to the semiconductor's SDKs and development environment. You can develop using the tools of choice from [STMicroelectronics](https://www.st.com/content/st_com/en/campaigns/x-cube-azrtos-azure-rtos-stm32.html), [NXP](https://www.nxp.com/design/software/embedded-software/azure-rtos-for-nxp-microcontrollers:AZURE-RTOS), [Renesas](https://github.com/renesas/azure-rtos) and [Microchip](https://mu.microchip.com/get-started-simplifying-your-iot-design-with-azure-rtos).
We also provide [getting started guide](https://github.com/azure-rtos/getting-started) and [samples](https://github.com/azure-rtos/samples) using hero development boards from semiconductors you can build and test with.
See [Overview of Azure RTOS ThreadX](https://learn.microsoft.com/en-us/azure/rtos/threadx/overview-threadx) for the high-level overview, and all documentation and APIs can be found in: [Azure RTOS ThreadX documentation](https://learn.microsoft.com/en-us/azure/rtos/threadx/).
Also there is dedicated [learning path of Azure RTOS ThreadX](https://learn.microsoft.com/training/paths/azure-rtos-threadx/) for learning systematically.
# Understanding inter-component dependencies
## Repository Structure and Usage
### Directory layout
The main components of Azure RTOS are each provided in their own repository, but there are dependencies between them--shown in the following graph--that are important to understand when setting up your builds.
.
├── cmake # CMakelist files for building the project
├── common # Core ThreadX files
├── 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
│ │ ├── iar # Example IAR compiler sample project
│ │ │ ├── example build # IAR workspace and sample project files
│ │ │ ├── inc # tx_port.h for this architecture
│ │ │ └── src # Source files for this architecture
│ │ ├── 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
└── utility # Test cases and utilities
![dependency graph](docs/deps.png)
# Building and using the library
## Prerequisites
Install the following tools:
* [CMake](https://cmake.org/download/) version 3.0 or later
* [GCC compilers for arm-none-eabi](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads)
* [Ninja](https://ninja-build.org/)
## Cloning the repo
```bash
$ git clone https://github.com/azure-rtos/threadx.git
```
## Building as a static library
Each component of Azure RTOS comes with a composable CMake-based build system that supports many different MCUs and host systems. Integrating any of these components into your device app code is as simple as adding a git submodule and then including it in your build using the CMake command `add_subdirectory()`.
While the typical usage pattern is to include threadx into your device code source tree to be built & linked with your code, you can compile this project as a standalone static library to confirm your build is set up correctly.
```bash
$ cmake -Bbuild -DCMAKE_TOOLCHAIN_FILE=cmake/cortex_m4.cmake -GNinja .
$ cmake --build ./build
```
NOTE: You will have to take the dependency graph above into account when building anything other than threadx itself.
# Repository Structure and Usage
## Branches & Releases
The master branch has the most recent code with all new features and bug fixes. It does not represent the latest General Availability (GA) release of the library.
## Releases
Each official release (preview or GA) will be tagged to mark the commit and push it into the Github releases tab, e.g. `v6.0-rel`.
## Directory layout
The master branch has the most recent code with all new features and bug fixes. It does not represent the latest General Availability (GA) release of the library. Each official release (preview or GA) will be tagged to mark the commit and push it into the Github releases tab, e.g. `v6.2-rel`.
> When you see xx-xx-xxxx, 6.x or x.x in function header, this means the file is not officially released yet. They will be updated in the next release. See example below.
```
- cmake
- common
- inc
- src
- ports
- cortex_m0/gnu
- inc
- src
- cortex_m3/gnu
- inc
- src
- cortex_m4/gnu
- inc
- src
- cortex_m7/gnu
- inc
- src
- samples
/**************************************************************************/
/* */
/* FUNCTION RELEASE */
/* */
/* _tx_initialize_low_level Cortex-M23/GNU */
/* 6.x */
/* AUTHOR */
/* */
/* Scott Larson, 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 Scott Larson Initial Version 6.1 */
/* xx-xx-xxxx Scott Larson Include tx_user.h, */
/* resulting in version 6.x */
/* */
/**************************************************************************/
```
# Security
## Supported Architecture Ports
### ThreadX
```
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
linux cortex_a5 cortex_m55
risc-v32 cortex_a53 cortex_m7
rxv1 cortex_a55 cortex_m85
rxv2 cortex_a57
rxv3 cortex_a5x
win32 cortex_a65
xtensa cortex_a65ae
cortex_a7
cortex_a72
cortex_a73
cortex_a75
cortex_a76
cortex_a76ae
cortex_a77
cortex_a8
cortex_a9
```
### ThreadX Modules
[Azure RTOS ThreadX Modules](https://learn.microsoft.com/azure/rtos/threadx-modules/chapter1) component provides an infrastructure for applications to dynamically load modules that are built separately from the resident portion of the application.
```
cortex_a35
cortex_a35_smp
cortex_a7
cortex_m0+
cortex_m23
cortex_m3
cortex_m33
cortex_m4
cortex_m7
cortex_r4
rxv2
```
### ThreadX SMP
[Azure RTOS ThreadX SMP](https://learn.microsoft.com/azure/rtos/threadx/threadx-smp/chapter1) is a high-performance real-time SMP kernel designed specifically for embedded applications.
```
arc_hs_smp
cortex_a34_smp
cortex_a35_smp
cortex_a53_smp
cortex_a55_smp
cortex_a57_smp
cortex_a5x_smp
cortex_a5_smp
cortex_a65ae_smp
cortex_a65_smp
cortex_a72_smp
cortex_a73_smp
cortex_a75_smp
cortex_a76ae_smp
cortex_a76_smp
cortex_a77_smp
cortex_a78_smp
cortex_a7_smp
cortex_a9_smp
linux
```
## Adaptation layer for ThreadX
Azure RTOS ThreadX is an advanced real-time operating system (RTOS) designed specifically for deeply embedded applications. To help ease application migration to Azure RTOS, ThreadX provides [adaption layers](https://github.com/azure-rtos/threadx/tree/master/utility/rtos_compatibility_layers) for various legacy RTOS APIs (FreeRTOS, POSIX, OSEK, etc.).
## Component dependencies
The main components of Azure RTOS are each provided in their own repository, but there are dependencies between them, as shown in the following graph. This is important to understand when setting up your builds.
![dependency graph](docs/deps.png)
> You will have to take the dependency graph above into account when building anything other than ThreadX itself.
### Building and using the library
Instruction for building the ThreadX as static library using Arm GNU Toolchain and CMake. If you are using toolchain and IDE from semiconductor, you might follow its own instructions to use Azure RTOS components as explained in the [Getting Started](#getting-started) section.
1. Install the following tools:
* [CMake](https://cmake.org/download/) version 3.0 or later
* [Arm GNU Toolchain for arm-none-eabi](https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads)
* [Ninja](https://ninja-build.org/)
1. Cloning the repo
```bash
$ git clone https://github.com/azure-rtos/threadx.git
```
1. Define the features and addons you need in `tx_user.h` and build together with the component source code. You can refer to [`tx_user_sample.h`](https://github.com/azure-rtos/threadx/blob/master/common/inc/tx_user_sample.h) as an example.
1. Building as a static library
Each component of Azure RTOS comes with a composable CMake-based build system that supports many different MCUs and host systems. Integrating any of these components into your device app code is as simple as adding a git submodule and then including it in your build using the CMake `add_subdirectory()`.
While the typical usage pattern is to include ThreadX into your device code source tree to be built & linked with your code, you can compile this project as a standalone static library to confirm your build is set up correctly.
An example of building the library for Cortex-M4:
```bash
$ cmake -Bbuild -GNinja -DCMAKE_TOOLCHAIN_FILE=cmake/cortex_m4.cmake .
$ cmake --build ./build
```
## Professional support
[Professional support plans](https://azure.microsoft.com/support/options/) are available from Microsoft. For community support and others, see the [Resources](#resources) section below.
## Licensing
License terms for using Azure RTOS are defined in the LICENSE.txt file of this repo. Please refer to this file for all definitive licensing information. No additional license fees are required for deploying Azure RTOS on hardware defined in the LICENSED-HARDWARE.txt file. If you are using hardware not defined in the LICENSED-HARDWARE.txt file or have licensing questions in general, please contact Microsoft directly at https://aka.ms/azrtos-license.
## Resources
The following are references to additional Azure RTOS resources:
- **Product introduction and white papers**: https://azure.com/rtos
- **General technical questions**: https://aka.ms/QnA/azure-rtos
- **Product issues and bugs, or feature requests**: https://github.com/azure-rtos/threadx/issues
- **Licensing and sales questions**: https://aka.ms/azrtos-license
- **Product roadmap and support policy**: https://aka.ms/azrtos/lts
- **Blogs and videos**: http://msiotblog.com and https://aka.ms/iotshow
- **Azure RTOS TraceX Installer**: https://aka.ms/azrtos-tracex-installer
You can also check [previous questions](https://stackoverflow.com/questions/tagged/azure-rtos+threadx) or ask new ones on StackOverflow using the `azure-rtos` and `threadx` tags.
## Security
Azure RTOS provides OEMs with components to secure communication and to create code and data isolation using underlying MCU/MPU hardware protection mechanisms. It is ultimately the responsibility of the device builder to ensure the device fully meets the evolving security requirements associated with its specific use case.
# Adaptation layer for ThreadX
## Contribution
Azure RTOS ThreadX is an advanced real-time operating system (RTOS) designed specifically for deeply embedded applications. To help ease application migration to Auzre RTOS, ThreadX provides [adaption layers](https://github.com/azure-rtos/threadx/tree/master/utility/rtos_compatibility_layers) for various legacy RTOS APIs (FreeRTOS, POSIX, OSEK, etc.).
# Licensing
License terms for using Azure RTOS are defined in the LICENSE.txt file of this repo. Please refer to this file for all definitive licensing information. No additional license fees are required for deploying Azure RTOS on hardware defined in the LICENSED-HARDWARE.txt file. If you are using hardware not defined in the LICENSED-HARDWARE.txt file or have licensing questions in general, please contact Microsoft directly at https://azure-rtos.ms-iot-contact.com/
# Contribution, feedback, issues, and professional support
If you encounter any bugs, have suggestions for new features, or if you would like to become an active contributor to this project, please follow the instructions provided in the contribution guideline for the corresponding repo.
For basic support, click Issues in the command bar or post a question to [Stack Overflow](http://stackoverflow.com/questions/tagged/azure-rtos+threadx) using the `threadx` and `azure-rtos` tags.
Professional support plans (https://azure.microsoft.com/en-us/support/options/) are available from Microsoft.
# Additional Resources
The following are references to additional Azure RTOS and Azure IoT in general:
| | |
|---|---|
| TraceX Installer | https://aka.ms/azrtos-tracex-installer |
| Azure RTOS Documentation and Guides: | https://docs.microsoft.com/azure/rtos |
| Azure RTOS Website: | https://azure.microsoft.com/services/rtos/ |
| Azure RTOS Sales Questions: | https://azure-rtos.ms-iot-contact.com/ |
| For technical questions check out Microsoft Q/A for Azure IoT: | https://aka.ms/QnA/azure-rtos |
| Internet of Things Show for latest announcements and online training: | https://aka.ms/iotshow |
| IoT Tech Community: | https://aka.ms/community/azure-rtos |
Please follow the instructions provided in the [CONTRIBUTING.md](./CONTRIBUTING.md) for the corresponding repository.

View File

@@ -202,6 +202,7 @@ target_sources(${PROJECT_NAME}
# Add the Common/inc directory to the project include list
target_include_directories(${PROJECT_NAME}
SYSTEM
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/inc
)

View File

@@ -26,7 +26,7 @@
/* APPLICATION INTERFACE DEFINITION RELEASE */
/* */
/* tx_api.h PORTABLE C */
/* 6.1.10 */
/* 6.2.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -82,6 +82,21 @@
/* 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 */
/* */
/**************************************************************************/
@@ -108,6 +123,9 @@ extern "C" {
#include "tx_port.h"
#if (defined(TX_EXECUTION_PROFILE_ENABLE) && !defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY))
#include "tx_execution_profile.h"
#endif
/* Define basic constants for the ThreadX kernel. */
@@ -117,8 +135,8 @@ extern "C" {
#define AZURE_RTOS_THREADX
#define THREADX_MAJOR_VERSION 6
#define THREADX_MINOR_VERSION 1
#define THREADX_PATCH_VERSION 10
#define THREADX_MINOR_VERSION 2
#define THREADX_PATCH_VERSION 1
/* Define the following symbol for backward compatibility */
#define EL_PRODUCT_THREADX
@@ -216,12 +234,82 @@ extern "C" {
#define TX_FEATURE_NOT_ENABLED ((UINT) 0xFF)
#ifdef TX_64_BIT
#ifndef TX_THREAD_EXTENSION_PTR_SET
#define TX_THREAD_EXTENSION_PTR_SET(a, b) { \
TX_THREAD *thread_ptr; \
thread_ptr = (TX_THREAD *) (a); \
(thread_ptr -> tx_thread_extension_ptr) = (VOID *)(b); \
}
#endif /* TX_THREAD_EXTENSION_PTR_SET */
#ifndef TX_THREAD_EXTENSION_PTR_GET
#define TX_THREAD_EXTENSION_PTR_GET(a, b, c) { \
TX_PARAMETER_NOT_USED(c); \
TX_THREAD *thread_ptr; \
thread_ptr = tx_thread_identify(); \
while(1)\
{ \
if (thread_ptr -> tx_thread_extension_ptr) \
{ \
(a) = (b *)(thread_ptr -> tx_thread_extension_ptr); \
break; \
} \
tx_thread_sleep(1); \
} \
}
#endif /* TX_THREAD_EXTENSION_PTR_GET */
#ifndef TX_TIMER_EXTENSION_PTR_SET
#define TX_TIMER_EXTENSION_PTR_SET(a, b) { \
TX_TIMER *timer_ptr; \
timer_ptr = (TX_TIMER *) (a); \
(timer_ptr -> tx_timer_internal.tx_timer_internal_extension_ptr) = (VOID *)(b); \
}
#endif /* TX_TIMER_EXTENSION_PTR_SET */
#ifndef TX_TIMER_EXTENSION_PTR_GET
#define TX_TIMER_EXTENSION_PTR_GET(a, b, c) { \
TX_PARAMETER_NOT_USED(c); \
if (!_tx_timer_expired_timer_ptr -> tx_timer_internal_extension_ptr) \
return; \
(a) = (b *)(_tx_timer_expired_timer_ptr -> tx_timer_internal_extension_ptr); \
}
#endif /* TX_TIMER_EXTENSION_PTR_GET */
#else /* not 64 bit */
#ifndef TX_THREAD_EXTENSION_PTR_SET
#define TX_THREAD_EXTENSION_PTR_SET(a, b)
#endif /* TX_THREAD_EXTENSION_PTR_SET */
#ifndef TX_THREAD_EXTENSION_PTR_GET
#define TX_THREAD_EXTENSION_PTR_GET(a, b, c) { \
(a) = (b *)(c); \
}
#endif /* TX_THREAD_EXTENSION_PTR_GET */
#ifndef TX_TIMER_EXTENSION_PTR_SET
#define TX_TIMER_EXTENSION_PTR_SET(a, b)
#endif /* TX_TIMER_EXTENSION_PTR_SET */
#ifndef TX_TIMER_EXTENSION_PTR_GET
#define TX_TIMER_EXTENSION_PTR_GET(a, b, c) { \
(a) = (b *)(c); \
}
#endif /* TX_TIMER_EXTENSION_PTR_GET */
#endif /* TX_64_BIT */
/* Define the common timer tick reference for use by other middleware components. The default
value is 10ms, but may be replaced by a port specific version in tx_port.h or by the user
as a compilation option. */
#ifndef TX_TIMER_TICKS_PER_SECOND
#define TX_TIMER_TICKS_PER_SECOND ((ULONG) 100)
#define TX_TIMER_TICKS_PER_SECOND (100UL)
#endif
@@ -522,8 +610,8 @@ typedef struct TX_THREAD_STRUCT
For Azure RTOS 6, user shall use TX_EXECUTION_PROFILE_ENABLE instead of TX_ENABLE_EXECUTION_CHANGE_NOTIFY,
and SHALL NOT add variables to TX_THREAD_EXTENSION_3. */
#if (defined(TX_EXECUTION_PROFILE_ENABLE) && !defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY))
unsigned long long tx_thread_execution_time_total;
unsigned long long tx_thread_execution_time_last_start;
EXECUTION_TIME tx_thread_execution_time_total;
EXECUTION_TIME_SOURCE_TYPE tx_thread_execution_time_last_start;
#endif
/* Define suspension sequence number. This is used to ensure suspension is still valid when

View File

@@ -26,7 +26,7 @@
/* PORT SPECIFIC C INFORMATION RELEASE */
/* */
/* tx_user.h PORTABLE C */
/* 6.1.9 */
/* 6.1.11 */
/* */
/* AUTHOR */
/* */
@@ -58,6 +58,10 @@
/* 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 */
/* */
/**************************************************************************/
@@ -116,7 +120,7 @@
Note: the actual hardware timer value may need to be changed (usually in tx_initialize_low_level). */
/*
#define TX_TIMER_TICKS_PER_SECOND ((ULONG) 100)
#define TX_TIMER_TICKS_PER_SECOND (100UL)
*/
/* Determine if there is a FileX pointer in the thread control block.

View File

@@ -36,7 +36,7 @@
/* FUNCTION RELEASE */
/* */
/* _tx_event_flags_get PORTABLE C */
/* 6.1 */
/* 6.2.0 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -73,9 +73,15 @@
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 William E. Lamie Initial Version 6.0 */
/* 09-30-2020 Yuxin Zhou Modified comment(s), */
/* 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,
@@ -122,6 +128,9 @@ UINT interrupted_set_request;
/* Pickup current flags. */
current_flags = group_ptr -> tx_event_flags_group_current;
/* Return the actual event flags and apply delayed clearing. */
*actual_flags_ptr = current_flags & ~group_ptr -> tx_event_flags_group_delayed_clear;
/* Apply the event flag option mask. */
and_request = (get_option & TX_AND);
@@ -155,9 +164,6 @@ UINT interrupted_set_request;
if (flags_satisfied != ((ULONG) 0))
{
/* Return the actual event flags that satisfied the request. */
*actual_flags_ptr = current_flags;
/* Pickup the clear bit. */
clear_request = (get_option & TX_EVENT_FLAGS_CLEAR_MASK);
@@ -218,9 +224,6 @@ UINT interrupted_set_request;
/* Yes, this request can be handled immediately. */
/* Return the actual event flags that satisfied the request. */
*actual_flags_ptr = current_flags;
/* Pickup the clear bit. */
clear_request = (get_option & TX_EVENT_FLAGS_CLEAR_MASK);
@@ -271,16 +274,17 @@ UINT interrupted_set_request;
#endif
else
{
/* flags_satisfied is 0. */
/* Determine if the request specifies suspension. */
if (wait_option != TX_NO_WAIT)
{
/* Determine if the preempt disable flag is non-zero. */
if (_tx_thread_preempt_disable != ((UINT) 0))
/* Determine if the preempt disable flag is non-zero OR the requested events is 0. */
if ((_tx_thread_preempt_disable != ((UINT) 0)) || (requested_flags == (UINT) 0))
{
/* Suspension is not allowed if the preempt disable flag is non-zero at this point, return error completion. */
/* Suspension is not allowed if the preempt disable flag is non-zero at this point,
or if requested_flags is 0, return error completion. */
status = TX_NO_EVENTS;
}
else

View File

@@ -36,7 +36,7 @@
/* FUNCTION RELEASE */
/* */
/* _tx_event_flags_set PORTABLE C */
/* 6.1 */
/* 6.1.11 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -72,9 +72,13 @@
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 William E. Lamie Initial Version 6.0 */
/* 09-30-2020 Yuxin Zhou Modified comment(s), */
/* 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)
@@ -264,9 +268,6 @@ VOID (*events_set_notify)(struct TX_EVENT_FLAGS_GROUP_STRUCT *notify_
/* Yes, resume the thread and apply any event flag
clearing. */
/* Set the preempt check flag. */
preempt_check = TX_TRUE;
/* Return the actual event flags that satisfied the request. */
suspend_info_ptr = TX_VOID_TO_ULONG_POINTER_CONVERT(thread_ptr -> tx_thread_additional_suspend_info);
*suspend_info_ptr = current_event_flags;
@@ -336,6 +337,11 @@ 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
unrelated ISR processing. */
preempt_check = TX_TRUE;
/* Loop to examine all of the suspended threads. */
do
{
@@ -419,9 +425,6 @@ VOID (*events_set_notify)(struct TX_EVENT_FLAGS_GROUP_STRUCT *notify_
/* Yes, this request can be handled now. */
/* Set the preempt check flag. */
preempt_check = TX_TRUE;
/* Determine if the thread is still suspended on the event flag group. If not, a wait
abort must have been done from an ISR. */
if (thread_ptr -> tx_thread_state == TX_EVENT_FLAG)

View File

@@ -30,6 +30,9 @@
#include "tx_thread.h"
#include "tx_timer.h"
#if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
extern VOID _tx_execution_initialize(VOID);
#endif
/* Define any port-specific scheduling data structures. */
@@ -46,7 +49,7 @@ TX_SAFETY_CRITICAL_EXCEPTION_HANDLER
/* FUNCTION RELEASE */
/* */
/* _tx_initialize_kernel_enter PORTABLE C */
/* 6.1 */
/* 6.1.11 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -84,9 +87,12 @@ TX_SAFETY_CRITICAL_EXCEPTION_HANDLER
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 William E. Lamie Initial Version 6.0 */
/* 09-30-2020 Yuxin Zhou Modified comment(s), */
/* 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 */
/* */
/**************************************************************************/
VOID _tx_initialize_kernel_enter(VOID)
@@ -138,6 +144,11 @@ VOID _tx_initialize_kernel_enter(VOID)
/* Call any port specific pre-scheduler processing. */
TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION
#if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
/* Initialize Execution Profile Kit. */
_tx_execution_initialize();
#endif
/* Enter the scheduling loop to start executing threads! */
_tx_thread_schedule();

View File

@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _tx_thread_wait_abort PORTABLE C */
/* 6.1 */
/* 6.2.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -68,9 +68,12 @@
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 William E. Lamie Initial Version 6.0 */
/* 09-30-2020 Yuxin Zhou Modified comment(s), */
/* 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)
@@ -131,6 +134,18 @@ ULONG suspension_sequence;
/* Restore interrupts. */
TX_RESTORE
#endif
}
else if(thread_ptr -> tx_thread_suspend_cleanup == TX_NULL)
{
/* Thread is coming out of suspension elsewhere. */
#ifndef TX_NOT_INTERRUPTABLE
/* Increment the disable preemption flag. */
_tx_thread_preempt_disable++;
/* Restore interrupts. */
TX_RESTORE
#endif
}
else
{
@@ -167,13 +182,8 @@ ULONG suspension_sequence;
TX_RESTORE
#endif
/* Call any cleanup routines. */
if (suspend_cleanup != TX_NULL)
{
/* Yes, there is a function to call. */
(suspend_cleanup)(thread_ptr, suspension_sequence);
}
/* Call cleanup routine. */
(suspend_cleanup)(thread_ptr, suspension_sequence);
}
/* If the abort of the thread wait was successful, if so resume the thread. */

View File

@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _tx_trace_object_register PORTABLE C */
/* 6.1 */
/* 6.1.12 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -69,9 +69,12 @@
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 William E. Lamie Initial Version 6.0 */
/* 09-30-2020 Yuxin Zhou Modified comment(s), */
/* 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)
@@ -223,6 +226,12 @@ TX_TRACE_OBJECT_ENTRY *entry_ptr;
work_ptr = TX_CHAR_TO_UCHAR_POINTER_CONVERT(object_name);
work_ptr = TX_UCHAR_POINTER_ADD(work_ptr, i);
/* Determine if object_name (work_ptr) is null. */
if (work_ptr == TX_NULL)
{
break;
}
/* Copy a character of the name. */
entry_ptr -> tx_trace_object_entry_name[i] = (UCHAR) *work_ptr;

View File

@@ -35,6 +35,10 @@
#include "txm_module.h"
#include "txm_module_manager_util.h"
#ifdef TX_ENABLE_EVENT_TRACE
#include "tx_trace.h"
#endif
#ifdef TXM_MODULE_ENABLE_FILEX
extern UINT _txm_module_manager_filex_stop(TXM_MODULE_INSTANCE *module_instance);
#endif
@@ -60,7 +64,7 @@ extern UINT _txm_module_manager_usbx_stop(TXM_MODULE_INSTANCE *module_instance)
/* FUNCTION RELEASE */
/* */
/* _txm_module_manager_stop PORTABLE C */
/* 6.1.5 */
/* 6.2.1 */
/* AUTHOR */
/* */
/* Scott Larson, Microsoft Corporation */
@@ -112,6 +116,8 @@ extern UINT _txm_module_manager_usbx_stop(TXM_MODULE_INSTANCE *module_instance)
/* 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)

View File

@@ -39,7 +39,7 @@
/* FUNCTION RELEASE */
/* */
/* _txm_module_manager_thread_create PORTABLE C */
/* 6.1.3 */
/* 6.2.1 */
/* AUTHOR */
/* */
/* Scott Larson, Microsoft Corporation */
@@ -91,6 +91,9 @@
/* 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 */
/* */
/**************************************************************************/
UINT _txm_module_manager_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr,
@@ -158,8 +161,8 @@ ULONG i;
}
/* Check the stack pointer to see if it overlaps with this thread's stack. */
if ((((UCHAR *) ((VOID *) stack_start)) <= ((UCHAR *) ((VOID *) next_thread -> tx_thread_stack_end))) &&
(((UCHAR *) ((VOID *) stack_end)) >= ((UCHAR *) ((VOID *) next_thread -> tx_thread_stack_start))))
if ((((UCHAR *) ((VOID *) stack_start)) <= ((UCHAR *) ((VOID *) next_thread -> tx_thread_module_stack_end))) &&
(((UCHAR *) ((VOID *) stack_end)) >= ((UCHAR *) ((VOID *) next_thread -> tx_thread_module_stack_start))))
{
/* Stacks overlap, clear the stack pointer to force a stack error below. */
stack_start = TX_NULL;

View File

@@ -0,0 +1,139 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Define the file handles. */
FILE *source_file;
FILE *array_file;
int main(int argc, char* argv[])
{
int alpha;
int alpha1;
int alpha2;
int alpha3;
unsigned long address;
unsigned long column;
/* Determine if the proper number of files are provided. */
if (argc != 3)
{
/* Print an error message out and wait for user key hit. */
printf("module_binary_to_c_array.exe - Copyright (c) Microsoft Corporation v5.8\n");
printf("**** Error: invalid input parameter for module_binary_to_c_array.exe **** \n");
printf(" Command Line Should be:\n\n");
printf(" > module_binary_to_c_array source_binary_file c_array_file <cr> \n\n");
return(1);
}
/* Attempt to open the source file for reading. */
source_file = fopen(argv[1], "rb");
/* Determine if the source file was opened properly. */
if (source_file == NULL)
{
/* Print an error message out and wait for user key hit. */
printf("**** Error: open failed on binary source file **** \n");
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);
alpha2 = fgetc(source_file);
alpha3 = fgetc(source_file);
if ((alpha != 0x4D && alpha != 0x55) || (alpha1 != 0x4F && alpha1 != 0x44) || (alpha2 != 0x44 && alpha2 != 0x4F) || (alpha3 != 0x55 && alpha3 != 0x4D))
{
/* Print an error message out and wait for user key hit. */
printf("**** Error: invalid format of binary input file **** \n");
printf(" File: %s ", argv[1]);
return(3);
}
/* Attempt to open the dump file for writing. */
array_file = fopen(argv[2], "w");
/* Determine if the dump file was opened properly. */
if (array_file == NULL)
{
/* Print an error message out and wait for user key hit. */
printf("**** Error: open failed on C array file **** \n");
printf(" File: %s ", argv[2]);
return(4);
}
fprintf(array_file, "/**************************** Module-Binary-to-C-array Utility **********************************/\n");
fprintf(array_file, "/* */\n");
fprintf(array_file, "/* Copyright (c) Microsoft Corporation Version 5.4, build date: 03-01-2018 */\n");
fprintf(array_file, "/* */\n");
fprintf(array_file, "/************************************************************************************************/\n\n");
fprintf(array_file, "/* \n");
fprintf(array_file, " Input Binary file: %30s\n", argv[1]);
fprintf(array_file, " Output C Array file: %30s\n", argv[2]);
fprintf(array_file, "*/\n\n");
/* Now print out the sections in a C array. */
fprintf(array_file, "unsigned char module_code[] = {\n\n");
fprintf(array_file, "/* Address Contents */\n\n");
/* Seek to the beginning of the source file. */
fseek(source_file, 0, SEEK_SET);
/* Initialize the variables. */
address = 0;
column = 0;
do
{
/* Get character from the input file. */
alpha = fgetc(source_file);
/* Have we reached EOF? */
if (alpha == EOF)
break;
/* Print out character with a leading comma, except on the first character. */
if (column == 0)
{
if (address != 0)
fprintf(array_file, ",\n");
fprintf(array_file, "/* 0x%08X */ 0x%02X", address, (unsigned int) alpha);
}
else
fprintf(array_file, ", 0x%02X", (unsigned int) alpha);
/* Move column forward. */
column++;
/* Are we at the end of the column? */
if (column >= 16)
{
column = 0;
}
/* Move address forward. */
address++;
} while (alpha != EOF);
/* Finally, finish the C array containing the module code. */
fprintf(array_file, "};\n\n");
/* Close files. */
fclose(source_file);
fclose(array_file);
return 0;
}

View File

@@ -0,0 +1,332 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Define the file handles. */
FILE *source_file;
FILE *binary_file;
#define ELF_ID_STRING_SIZE 16
#define ELF_ARM_MACHINE_TYPE 40
#define ELF_EXECUTABLE 2
typedef struct ELF_HEADER_STRUCT
{
unsigned char elf_header_id_string[ELF_ID_STRING_SIZE];
unsigned short elf_header_file_type;
unsigned short elf_header_machinge_type;
unsigned long elf_header_version;
unsigned long elf_header_entry_address;
unsigned long elf_header_program_header_offset;
unsigned long elf_header_section_header_offset;
unsigned long elf_header_processor_flags;
unsigned short elf_header_size;
unsigned short elf_header_program_header_size;
unsigned short elf_header_program_header_entries;
unsigned short elf_header_section_header_size;
unsigned short elf_header_section_header_entries;
unsigned short elf_header_section_string_index;
} ELF_HEADER;
typedef struct ELF_PROGRAM_HEADER_STRUCT
{
unsigned long elf_program_header_type;
unsigned long elf_program_header_offset;
unsigned long elf_program_header_virtual_address;
unsigned long elf_program_header_physical_address;
unsigned long elf_program_header_file_size;
unsigned long elf_program_header_memory_size;
unsigned long elf_program_header_flags;
unsigned long elf_program_header_alignment;
} ELF_PROGRAM_HEADER;
typedef struct ELF_SECTION_HEADER_STRUCT
{
unsigned long elf_section_header_name;
unsigned long elf_section_header_type;
unsigned long elf_section_header_flags;
unsigned long elf_section_header_address;
unsigned long elf_section_header_offset;
unsigned long elf_section_header_size;
unsigned long elf_section_header_link;
unsigned long elf_section_header_info;
unsigned long elf_section_header_alignment;
unsigned long elf_section_header_entry_size;
} ELF_SECTION_HEADER;
typedef struct ELF_SYMBOL_TABLE_ENTRY_STRUCT
{
unsigned long elf_symbol_table_entry_name;
unsigned long elf_symbol_table_entry_address;
unsigned long elf_symbol_table_entry_size;
unsigned char elf_symbol_table_entry_info;
unsigned char elf_symbol_table_entry_other;
unsigned short elf_symbol_table_entry_shndx;
} ELF_SYMBOL_TABLE_ENTRY;
typedef struct CODE_SECTION_ENTRY_STRUCT
{
unsigned long code_section_index;
unsigned long code_section_address;
unsigned long code_section_size;
} CODE_SECTION_ENTRY;
/* Define global variables. */
ELF_HEADER header;
ELF_PROGRAM_HEADER *program_header;
ELF_SECTION_HEADER *section_header;
unsigned char *section_string_table;
unsigned char *main_string_table;
unsigned long total_symbols;
ELF_SYMBOL_TABLE_ENTRY *symbol_table;
unsigned long total_functions;
ELF_SYMBOL_TABLE_ENTRY *function_table;
CODE_SECTION_ENTRY *code_section_array;
/* Define helper functions. */
int elf_object_read(unsigned long offset, void *object_address, int object_size)
{
int i;
int alpha;
unsigned char *buffer;
/* Setup the buffer pointer. */
buffer = (unsigned char *) object_address;
/* Seek to the proper position in the file. */
fseek(source_file, offset, SEEK_SET);
/* Read the ELF object. */
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);
}
int main(int argc, char* argv[])
{
unsigned long i, j;
unsigned long current_total;
unsigned long address;
unsigned long size;
unsigned char *code_buffer;
unsigned long code_section_index;
CODE_SECTION_ENTRY code_section_temp;
unsigned char zero_value;
/* Determine if the proper number of files are provided. */
if (argc != 3)
{
/* Print an error message out and wait for user key hit. */
printf("module_to_binary.exe - Copyright (c) Microsoft Corporation v5.8\n");
printf("**** Error: invalid input parameter for module_to_binary.exe **** \n");
printf(" Command Line Should be:\n\n");
printf(" > module_to_binary source_elf_file c_binary_file <cr> \n\n");
return(1);
}
/* Attempt to open the source file for reading. */
source_file = fopen(argv[1], "rb");
/* Determine if the source file was opened properly. */
if (source_file == NULL)
{
/* Print an error message out. */
printf("**** Error: open failed on source elf file **** \n");
printf(" File: %s ", argv[1]);
return(2);
}
/* Attempt to open the binary file for writing. */
binary_file = fopen(argv[2], "wb");
/* Determine if the binary file was opened properly. */
if (binary_file == NULL)
{
/* Print an error message out and wait for user key hit. */
printf("**** Error: open failed on binary output file **** \n");
printf(" File: %s ", argv[2]);
return(3);
}
/* Read the ELF header. */
elf_object_read(0, &header, sizeof(header));
/* 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));
/* Allocate memory for the section header(s). */
section_header = malloc(sizeof(ELF_SECTION_HEADER)*header.elf_header_section_header_entries);
/* Read the section header(s). */
elf_object_read(header.elf_header_section_header_offset, section_header, (sizeof(ELF_SECTION_HEADER)*header.elf_header_section_header_entries));
/* Alocate memory for the section string table. */
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);
/* Allocate memory for the code section array. */
code_section_array = malloc(sizeof(CODE_SECTION_ENTRY)*header.elf_header_section_header_entries);
code_section_index = 0;
/* Print out the section header(s). */
for (i = 0; i < header.elf_header_section_header_entries; i++)
{
/* Determine if this section is a code section and there is a size. */
if ((section_header[i].elf_section_header_type == 1) && (section_header[i].elf_section_header_size))
{
/* Check for an-instruction area. */
if ((section_header[i].elf_section_header_flags & 0x4) || (section_header[i].elf_section_header_flags & 0x2))
{
/* Determine if this new section overlaps with an existing section. */
for (j = 0; j < code_section_index; j++)
{
/* Is there an overlap? */
if ((section_header[i].elf_section_header_address >= code_section_array[j].code_section_address) &&
((section_header[i].elf_section_header_address+section_header[i].elf_section_header_size + section_header[i].elf_section_header_offset) < (code_section_array[j].code_section_address+code_section_array[j].code_section_size)))
{
/* New section is within a current section, just disregard it. */
break;
}
}
/* Determine if we have an overlap. */
if (j == code_section_index)
{
/* Yes, we have a code section... save it! */
code_section_array[code_section_index].code_section_index = i;
code_section_array[code_section_index].code_section_address = section_header[i].elf_section_header_address;
code_section_array[code_section_index].code_section_size = section_header[i].elf_section_header_size;
/* Move to next code section. */
code_section_index++;
}
}
}
}
/* Check for no code sections. */
if (code_section_index == 0)
{
/* Close files. */
fclose(source_file);
fclose(binary_file);
return(4);
}
/* One or more code sections have been found... let's put them in the correct order by address. */
i = 0;
while (i+1 < code_section_index)
{
/* Make the "ith" entry the lowest address. */
j = i + 1;
do
{
/* Is there a new lowest address? */
if (code_section_array[j].code_section_address < code_section_array[i].code_section_address)
{
/* Yes, swap them! */
code_section_temp = code_section_array[i];
code_section_array[i] = code_section_array[j];
code_section_array[j] = code_section_temp;
}
/* Move the inner index. */
j++;
} while (j < code_section_index);
/* Move top index. */
i++;
}
address = code_section_array[0].code_section_address;
zero_value = 0;
for (i = 0; i < code_section_index; i++)
{
/* Determine if there is any fill characters between sections. */
while (address < code_section_array[i].code_section_address)
{
/* Write a zero value. */
fwrite(&zero_value, 1, 1, binary_file);
/* Move address forward. */
address++;
}
/* Now allocate memory for the code section. */
code_buffer = malloc(code_section_array[i].code_section_size);
/* Read in the code area. */
j = code_section_array[i].code_section_index;
elf_object_read(section_header[j].elf_section_header_offset, code_buffer, code_section_array[i].code_section_size);
/* Write out the contents of this program area. */
size = code_section_array[i].code_section_size;
j = 0;
while (size)
{
/* Print out a byte. */
fwrite(&code_buffer[j], 1, 1, binary_file);
/* Move address forward. */
address++;
/* Decrement size. */
size--;
/* Move index into buffer. */
j++;
}
}
/* Close files. */
fclose(source_file);
fclose(binary_file);
return 0;
}

View File

@@ -0,0 +1,392 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Define the file handles. */
FILE *source_file;
FILE *array_file;
#define ELF_ID_STRING_SIZE 16
#define ELF_ARM_MACHINE_TYPE 40
#define ELF_EXECUTABLE 2
typedef struct ELF_HEADER_STRUCT
{
unsigned char elf_header_id_string[ELF_ID_STRING_SIZE];
unsigned short elf_header_file_type;
unsigned short elf_header_machinge_type;
unsigned long elf_header_version;
unsigned long elf_header_entry_address;
unsigned long elf_header_program_header_offset;
unsigned long elf_header_section_header_offset;
unsigned long elf_header_processor_flags;
unsigned short elf_header_size;
unsigned short elf_header_program_header_size;
unsigned short elf_header_program_header_entries;
unsigned short elf_header_section_header_size;
unsigned short elf_header_section_header_entries;
unsigned short elf_header_section_string_index;
} ELF_HEADER;
typedef struct ELF_PROGRAM_HEADER_STRUCT
{
unsigned long elf_program_header_type;
unsigned long elf_program_header_offset;
unsigned long elf_program_header_virtual_address;
unsigned long elf_program_header_physical_address;
unsigned long elf_program_header_file_size;
unsigned long elf_program_header_memory_size;
unsigned long elf_program_header_flags;
unsigned long elf_program_header_alignment;
} ELF_PROGRAM_HEADER;
typedef struct ELF_SECTION_HEADER_STRUCT
{
unsigned long elf_section_header_name;
unsigned long elf_section_header_type;
unsigned long elf_section_header_flags;
unsigned long elf_section_header_address;
unsigned long elf_section_header_offset;
unsigned long elf_section_header_size;
unsigned long elf_section_header_link;
unsigned long elf_section_header_info;
unsigned long elf_section_header_alignment;
unsigned long elf_section_header_entry_size;
} ELF_SECTION_HEADER;
typedef struct ELF_SYMBOL_TABLE_ENTRY_STRUCT
{
unsigned long elf_symbol_table_entry_name;
unsigned long elf_symbol_table_entry_address;
unsigned long elf_symbol_table_entry_size;
unsigned char elf_symbol_table_entry_info;
unsigned char elf_symbol_table_entry_other;
unsigned short elf_symbol_table_entry_shndx;
} ELF_SYMBOL_TABLE_ENTRY;
typedef struct CODE_SECTION_ENTRY_STRUCT
{
unsigned long code_section_index;
unsigned long code_section_address;
unsigned long code_section_size;
} CODE_SECTION_ENTRY;
/* Define global variables. */
ELF_HEADER header;
ELF_PROGRAM_HEADER *program_header;
ELF_SECTION_HEADER *section_header;
unsigned char *section_string_table;
unsigned char *main_string_table;
unsigned long total_symbols;
ELF_SYMBOL_TABLE_ENTRY *symbol_table;
unsigned long total_functions;
ELF_SYMBOL_TABLE_ENTRY *function_table;
CODE_SECTION_ENTRY *code_section_array;
/* Define helper functions. */
int elf_object_read(unsigned long offset, void *object_address, int object_size)
{
int i;
int alpha;
unsigned char *buffer;
/* Setup the buffer pointer. */
buffer = (unsigned char *) object_address;
/* Seek to the proper position in the file. */
fseek(source_file, offset, SEEK_SET);
/* Read the ELF object. */
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);
}
int main(int argc, char* argv[])
{
unsigned long i, j, k;
unsigned long current_total;
unsigned long address;
unsigned long size;
unsigned long column;
unsigned char *code_buffer;
unsigned long code_section_index;
CODE_SECTION_ENTRY code_section_temp;
/* Determine if the proper number of files are provided. */
if (argc != 3)
{
/* Print an error message out and wait for user key hit. */
printf("module_to_c_array.exe - Copyright (c) Microsoft Corporation v5.8\n");
printf("**** Error: invalid input parameter for module_to_c_array.exe **** \n");
printf(" Command Line Should be:\n\n");
printf(" > module_to_c_array source_elf_file c_array_file <cr> \n\n");
return(1);
}
/* Attempt to open the source file for reading. */
source_file = fopen(argv[1], "rb");
/* Determine if the source file was opened properly. */
if (source_file == NULL)
{
/* Print an error message out and wait for user key hit. */
printf("**** Error: open failed on source elf file **** \n");
printf(" File: %s ", argv[1]);
return(2);
}
/* Attempt to open the dump file for writing. */
array_file = fopen(argv[2], "w");
/* Determine if the dump file was opened properly. */
if (array_file == NULL)
{
/* Print an error message out and wait for user key hit. */
printf("**** Error: open failed on C array file **** \n");
printf(" File: %s ", argv[2]);
return(3);
}
/* Read the ELF header. */
elf_object_read(0, &header, sizeof(header));
fprintf(array_file, "/**************************** Module-to-C-array Utility *****************************************/\n");
fprintf(array_file, "/* */\n");
fprintf(array_file, "/* Copyright (c) Microsoft Corporation Version 5.8, build date: 03-01-2018 */\n");
fprintf(array_file, "/* */\n");
fprintf(array_file, "/************************************************************************************************/\n\n");
fprintf(array_file, "/* \n");
fprintf(array_file, " Input ELF file: %30s\n", argv[1]);
fprintf(array_file, " Output C Array file: %30s\n", argv[2]);
fprintf(array_file, "*/\n\n");
/* 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));
/* Allocate memory for the section header(s). */
section_header = malloc(sizeof(ELF_SECTION_HEADER)*header.elf_header_section_header_entries);
/* Read the section header(s). */
elf_object_read(header.elf_header_section_header_offset, section_header, (sizeof(ELF_SECTION_HEADER)*header.elf_header_section_header_entries));
/* Alocate memory for the section string table. */
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);
/* Allocate memory for the code section array. */
code_section_array = malloc(sizeof(CODE_SECTION_ENTRY)*header.elf_header_section_header_entries);
code_section_index = 0;
/* Print out the section header(s). */
for (i = 0; i < header.elf_header_section_header_entries; i++)
{
/* Determine if this section is a code section and there is a size. */
if ((section_header[i].elf_section_header_type == 1) && (section_header[i].elf_section_header_size))
{
/* Check for an-instruction area. */
if ((section_header[i].elf_section_header_flags & 0x4) || (section_header[i].elf_section_header_flags & 0x2))
{
/* Determine if this new section overlaps with an existing section. */
for (j = 0; j < code_section_index; j++)
{
/* Is there an overlap? */
if ((section_header[i].elf_section_header_address >= code_section_array[j].code_section_address) &&
((section_header[i].elf_section_header_address+section_header[i].elf_section_header_size + section_header[i].elf_section_header_offset) < (code_section_array[j].code_section_address+code_section_array[j].code_section_size)))
{
/* New section is within a current section, just disregard it. */
break;
}
}
/* Determine if we have an overlap. */
if (j == code_section_index)
{
/* Yes, we have a code section... save it! */
code_section_array[code_section_index].code_section_index = i;
code_section_array[code_section_index].code_section_address = section_header[i].elf_section_header_address;
code_section_array[code_section_index].code_section_size = section_header[i].elf_section_header_size;
/* Move to next code section. */
code_section_index++;
}
}
}
}
/* Check for no code sections. */
if (code_section_index == 0)
{
/* Print an error message out. */
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);
return(4);
}
/* One or more code sections have been found... let's put them in the correct order by address. */
i = 0;
while (i+1 < code_section_index)
{
/* Make the "ith" entry the lowest address. */
j = i + 1;
do
{
/* Is there a new lowest address? */
if (code_section_array[j].code_section_address < code_section_array[i].code_section_address)
{
/* Yes, swap them! */
code_section_temp = code_section_array[i];
code_section_array[i] = code_section_array[j];
code_section_array[j] = code_section_temp;
}
/* Move the inner index. */
j++;
} while (j < code_section_index);
/* Move top index. */
i++;
}
/* Now print out the sections in a C array. */
fprintf(array_file, "unsigned char module_code[] = {\n\n");
fprintf(array_file, "/* Address Contents */\n\n");
address = code_section_array[0].code_section_address;
column = 0;
for (i = 0; i < code_section_index; i++)
{
/* Determine if there is any fill characters between sections. */
while (address < code_section_array[i].code_section_address)
{
/* Print out a character with a leading comma, except on the first character. */
if (column == 0)
fprintf(array_file, "/* 0x%08X */ 0x00", address);
else
fprintf(array_file, ", 0x00");
/* Move column forward. */
column++;
/* Are we at the end of the column? */
if (column >= 16)
{
fprintf(array_file, ",\n");
column = 0;
}
/* Move address forward. */
address++;
}
/* Now allocate memory for the code section. */
code_buffer = malloc(code_section_array[i].code_section_size);
/* Read in the code area. */
j = code_section_array[i].code_section_index;
elf_object_read(section_header[j].elf_section_header_offset, code_buffer, code_section_array[i].code_section_size);
/* Write out the contents of this program area. */
size = code_section_array[i].code_section_size;
j = 0;
k = 0;
while (size)
{
/* Print out a character with a leading comma, except on the first character. */
if (column == 0)
fprintf(array_file, "/* 0x%08X */ 0x%02X", address, (unsigned int) code_buffer[j]);
else
fprintf(array_file, ", 0x%02X", (unsigned int) code_buffer[j]);
/* Move column forward. */
column++;
/* Are we at the end of the column? */
if (column >= 16)
{
/* Is this the last byte of the image? */
if ((size != 1) || (i+1 != code_section_index))
{
if (k == 0)
{
k = code_section_array[i].code_section_index;
fprintf(array_file, ", /* SECTION: %s */\n", &section_string_table[section_header[k].elf_section_header_name]);
}
else
fprintf(array_file, ",\n");
}
column = 0;
}
/* Move address forward. */
address++;
/* Decrement size. */
size--;
/* Move index into buffer. */
j++;
}
}
/* Finally, finish the C array containing the module code. */
fprintf(array_file, "};\n\n");
/* Close files. */
fclose(source_file);
fclose(array_file);
return 0;
}

View File

@@ -26,7 +26,7 @@
/* APPLICATION INTERFACE DEFINITION RELEASE */
/* */
/* tx_api.h PORTABLE SMP */
/* 6.1.10 */
/* 6.2.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -71,6 +71,20 @@
/* 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 */
/* */
/**************************************************************************/
@@ -122,8 +136,8 @@ extern "C" {
#define AZURE_RTOS_THREADX
#define THREADX_MAJOR_VERSION 6
#define THREADX_MINOR_VERSION 1
#define THREADX_PATCH_VERSION 10
#define THREADX_MINOR_VERSION 2
#define THREADX_PATCH_VERSION 1
/* Define the following symbol for backward compatibility */
#define EL_PRODUCT_THREADX
@@ -221,12 +235,82 @@ extern "C" {
#define TX_FEATURE_NOT_ENABLED ((UINT) 0xFF)
#ifdef TX_64_BIT
#ifndef TX_THREAD_EXTENSION_PTR_SET
#define TX_THREAD_EXTENSION_PTR_SET(a, b) { \
TX_THREAD *thread_ptr; \
thread_ptr = (TX_THREAD *) (a); \
(thread_ptr -> tx_thread_extension_ptr) = (VOID *)(b); \
}
#endif /* TX_THREAD_EXTENSION_PTR_SET */
#ifndef TX_THREAD_EXTENSION_PTR_GET
#define TX_THREAD_EXTENSION_PTR_GET(a, b, c) { \
TX_PARAMETER_NOT_USED(c); \
TX_THREAD *thread_ptr; \
thread_ptr = tx_thread_identify(); \
while(1)\
{ \
if (thread_ptr -> tx_thread_extension_ptr) \
{ \
(a) = (b *)(thread_ptr -> tx_thread_extension_ptr); \
break; \
} \
tx_thread_sleep(1); \
} \
}
#endif /* TX_THREAD_EXTENSION_PTR_GET */
#ifndef TX_TIMER_EXTENSION_PTR_SET
#define TX_TIMER_EXTENSION_PTR_SET(a, b) { \
TX_TIMER *timer_ptr; \
timer_ptr = (TX_TIMER *) (a); \
(timer_ptr -> tx_timer_internal.tx_timer_internal_extension_ptr) = (VOID *)(b); \
}
#endif /* TX_TIMER_EXTENSION_PTR_SET */
#ifndef TX_TIMER_EXTENSION_PTR_GET
#define TX_TIMER_EXTENSION_PTR_GET(a, b, c) { \
TX_PARAMETER_NOT_USED(c); \
if (!_tx_timer_expired_timer_ptr -> tx_timer_internal_extension_ptr) \
return; \
(a) = (b *)(_tx_timer_expired_timer_ptr -> tx_timer_internal_extension_ptr); \
}
#endif /* TX_TIMER_EXTENSION_PTR_GET */
#else /* not 64 bit */
#ifndef TX_THREAD_EXTENSION_PTR_SET
#define TX_THREAD_EXTENSION_PTR_SET(a, b)
#endif /* TX_THREAD_EXTENSION_PTR_SET */
#ifndef TX_THREAD_EXTENSION_PTR_GET
#define TX_THREAD_EXTENSION_PTR_GET(a, b, c) { \
(a) = (b *)(c); \
}
#endif /* TX_THREAD_EXTENSION_PTR_GET */
#ifndef TX_TIMER_EXTENSION_PTR_SET
#define TX_TIMER_EXTENSION_PTR_SET(a, b)
#endif /* TX_TIMER_EXTENSION_PTR_SET */
#ifndef TX_TIMER_EXTENSION_PTR_GET
#define TX_TIMER_EXTENSION_PTR_GET(a, b, c) { \
(a) = (b *)(c); \
}
#endif /* TX_TIMER_EXTENSION_PTR_GET */
#endif /* TX_64_BIT */
/* Define the common timer tick reference for use by other middleware components. The default
value is 10ms, but may be replaced by a port specific version in tx_port.h or by the user
as a compilation option. */
#ifndef TX_TIMER_TICKS_PER_SECOND
#define TX_TIMER_TICKS_PER_SECOND ((ULONG) 100)
#define TX_TIMER_TICKS_PER_SECOND (100UL)
#endif

View File

@@ -26,7 +26,7 @@
/* PORT SPECIFIC C INFORMATION RELEASE */
/* */
/* tx_user.h PORTABLE C */
/* 6.1.9 */
/* 6.1.11 */
/* */
/* AUTHOR */
/* */
@@ -58,6 +58,10 @@
/* 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 */
/* */
/**************************************************************************/
@@ -116,7 +120,7 @@
Note: the actual hardware timer value may need to be changed (usually in tx_initialize_low_level). */
/*
#define TX_TIMER_TICKS_PER_SECOND ((ULONG) 100)
#define TX_TIMER_TICKS_PER_SECOND (100UL)
*/
/* Determine if there is a FileX pointer in the thread control block.

View File

@@ -36,7 +36,7 @@
/* FUNCTION RELEASE */
/* */
/* _tx_event_flags_get PORTABLE C */
/* 6.1 */
/* 6.2.0 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -73,9 +73,15 @@
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 William E. Lamie Initial Version 6.0 */
/* 09-30-2020 Yuxin Zhou Modified comment(s), */
/* 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,
@@ -122,6 +128,9 @@ UINT interrupted_set_request;
/* Pickup current flags. */
current_flags = group_ptr -> tx_event_flags_group_current;
/* Return the actual event flags and apply delayed clearing. */
*actual_flags_ptr = current_flags & ~group_ptr -> tx_event_flags_group_delayed_clear;
/* Apply the event flag option mask. */
and_request = (get_option & TX_AND);
@@ -155,9 +164,6 @@ UINT interrupted_set_request;
if (flags_satisfied != ((ULONG) 0))
{
/* Return the actual event flags that satisfied the request. */
*actual_flags_ptr = current_flags;
/* Pickup the clear bit. */
clear_request = (get_option & TX_EVENT_FLAGS_CLEAR_MASK);
@@ -218,9 +224,6 @@ UINT interrupted_set_request;
/* Yes, this request can be handled immediately. */
/* Return the actual event flags that satisfied the request. */
*actual_flags_ptr = current_flags;
/* Pickup the clear bit. */
clear_request = (get_option & TX_EVENT_FLAGS_CLEAR_MASK);
@@ -271,16 +274,17 @@ UINT interrupted_set_request;
#endif
else
{
/* flags_satisfied is 0. */
/* Determine if the request specifies suspension. */
if (wait_option != TX_NO_WAIT)
{
/* Determine if the preempt disable flag is non-zero. */
if (_tx_thread_preempt_disable != ((UINT) 0))
/* Determine if the preempt disable flag is non-zero OR the requested events is 0. */
if ((_tx_thread_preempt_disable != ((UINT) 0)) || (requested_flags == (UINT) 0))
{
/* Suspension is not allowed if the preempt disable flag is non-zero at this point, return error completion. */
/* Suspension is not allowed if the preempt disable flag is non-zero at this point,
or if requested_flags is 0, return error completion. */
status = TX_NO_EVENTS;
}
else

View File

@@ -36,7 +36,7 @@
/* FUNCTION RELEASE */
/* */
/* _tx_event_flags_set PORTABLE C */
/* 6.1 */
/* 6.1.11 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -72,9 +72,13 @@
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 William E. Lamie Initial Version 6.0 */
/* 09-30-2020 Yuxin Zhou Modified comment(s), */
/* 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)
@@ -264,9 +268,6 @@ VOID (*events_set_notify)(struct TX_EVENT_FLAGS_GROUP_STRUCT *notify_
/* Yes, resume the thread and apply any event flag
clearing. */
/* Set the preempt check flag. */
preempt_check = TX_TRUE;
/* Return the actual event flags that satisfied the request. */
suspend_info_ptr = TX_VOID_TO_ULONG_POINTER_CONVERT(thread_ptr -> tx_thread_additional_suspend_info);
*suspend_info_ptr = current_event_flags;
@@ -336,6 +337,11 @@ 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
unrelated ISR processing. */
preempt_check = TX_TRUE;
/* Loop to examine all of the suspended threads. */
do
{
@@ -419,9 +425,6 @@ VOID (*events_set_notify)(struct TX_EVENT_FLAGS_GROUP_STRUCT *notify_
/* Yes, this request can be handled now. */
/* Set the preempt check flag. */
preempt_check = TX_TRUE;
/* Determine if the thread is still suspended on the event flag group. If not, a wait
abort must have been done from an ISR. */
if (thread_ptr -> tx_thread_state == TX_EVENT_FLAG)

View File

@@ -37,7 +37,7 @@
/* FUNCTION RELEASE */
/* */
/* _tx_thread_create PORTABLE SMP */
/* 6.1.8 */
/* 6.2.0 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -85,6 +85,10 @@
/* 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 */
/* */
/**************************************************************************/
UINT _tx_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr,
@@ -344,11 +348,8 @@ ALIGN_TYPE updated_stack_start;
#endif
}
#ifndef TX_NOT_INTERRUPTABLE
/* Restore interrupts. */
TX_RESTORE
#endif
}
else
{

View File

@@ -38,7 +38,7 @@
/* FUNCTION RELEASE */
/* */
/* _tx_thread_system_suspend PORTABLE SMP */
/* 6.1 */
/* 6.1.11 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -87,7 +87,10 @@
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
/* 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 */
/* */
/**************************************************************************/
VOID _tx_thread_system_suspend(TX_THREAD *thread_ptr)
@@ -667,9 +670,18 @@ UINT processing_complete;
/* Calculate the possible complex path. */
complex_path_possible = possible_cores & available_cores;
/* Check if we need to loop to find the next highest priority thread. */
if (next_priority == TX_MAX_PRIORITIES)
{
loop_finished = TX_TRUE;
}
else
{
loop_finished = TX_FALSE;
}
/* Loop to find the next highest priority ready thread that is allowed to run on this core. */
loop_finished = TX_FALSE;
do
while (loop_finished == TX_FALSE)
{
/* Determine if there is a thread to examine. */
@@ -814,7 +826,7 @@ UINT processing_complete;
}
}
}
} while (loop_finished == TX_FALSE);
}
#ifdef TX_THREAD_SMP_INTER_CORE_INTERRUPT

View File

@@ -35,7 +35,7 @@
/* FUNCTION RELEASE */
/* */
/* _tx_thread_wait_abort PORTABLE C */
/* 6.1 */
/* 6.2.1 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -68,9 +68,12 @@
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 William E. Lamie Initial Version 6.0 */
/* 09-30-2020 Yuxin Zhou Modified comment(s), */
/* 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)
@@ -131,6 +134,18 @@ ULONG suspension_sequence;
/* Restore interrupts. */
TX_RESTORE
#endif
}
else if(thread_ptr -> tx_thread_suspend_cleanup == TX_NULL)
{
/* Thread is coming out of suspension elsewhere. */
#ifndef TX_NOT_INTERRUPTABLE
/* Increment the disable preemption flag. */
_tx_thread_preempt_disable++;
/* Restore interrupts. */
TX_RESTORE
#endif
}
else
{
@@ -167,13 +182,8 @@ ULONG suspension_sequence;
TX_RESTORE
#endif
/* Call any cleanup routines. */
if (suspend_cleanup != TX_NULL)
{
/* Yes, there is a function to call. */
(suspend_cleanup)(thread_ptr, suspension_sequence);
}
/* Call cleanup routine. */
(suspend_cleanup)(thread_ptr, suspension_sequence);
}
/* If the abort of the thread wait was successful, if so resume the thread. */

View File

@@ -34,7 +34,7 @@
/* FUNCTION RELEASE */
/* */
/* _tx_trace_object_register PORTABLE C */
/* 6.1 */
/* 6.1.12 */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
@@ -69,9 +69,12 @@
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 05-19-2020 William E. Lamie Initial Version 6.0 */
/* 09-30-2020 Yuxin Zhou Modified comment(s), */
/* 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)
@@ -223,6 +226,12 @@ TX_TRACE_OBJECT_ENTRY *entry_ptr;
work_ptr = TX_CHAR_TO_UCHAR_POINTER_CONVERT(object_name);
work_ptr = TX_UCHAR_POINTER_ADD(work_ptr, i);
/* Determine if object_name (work_ptr) is null. */
if (work_ptr == TX_NULL)
{
break;
}
/* Copy a character of the name. */
entry_ptr -> tx_trace_object_entry_name[i] = (UCHAR) *work_ptr;

BIN
docs/threadx-features.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 KiB

View File

@@ -322,7 +322,7 @@ void _tx_initialize_start_interrupts(void);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARCv2_EM/MetaWare Version 6.1.10 *";
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARCv2_EM/MetaWare Version 6.2.1 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];

View File

@@ -18,6 +18,9 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.equ BTA, 0x412
.equ KSTACK_TOP, 0x264
@@ -29,7 +32,7 @@
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_context_restore ARCv2_EM/MetaWare */
;/* 6.1.9 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -69,6 +72,9 @@
;/* 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)

View File

@@ -18,6 +18,9 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.equ BTA, 0x412
.equ KSTACK_TOP, 0x264
@@ -29,7 +32,7 @@
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_context_save ARCv2_EM/MetaWare */
;/* 6.1.6 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -64,6 +67,9 @@
;/* 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)

View File

@@ -18,13 +18,16 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
;/**************************************************************************/
;/* */
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_interrupt_control ARCv2_EM/MetaWare */
;/* 6.1.6 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -57,6 +60,9 @@
;/* 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)

View File

@@ -18,6 +18,9 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.equ BTA, 0x412
.equ KSTACK_TOP, 0x264
@@ -29,7 +32,7 @@
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_schedule ARCv2_EM/MetaWare */
;/* 6.1.9 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */

View File

@@ -18,6 +18,9 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.equ LONG_ALIGN_MASK, 0xFFFFFFFC
.equ INT_ENABLE_BITS, 0x8000001E
@@ -27,7 +30,7 @@
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_stack_build ARCv2_EM/MetaWare */
;/* 6.1.6 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -62,6 +65,9 @@
;/* 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))

View File

@@ -18,6 +18,9 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.equ KSTACK_TOP, 0x264
.equ KSTACK_BASE, 0x265
@@ -28,7 +31,7 @@
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_system_return ARCv2_EM/MetaWare */
;/* 6.1.9 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -66,6 +69,9 @@
;/* 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)

View File

@@ -18,13 +18,16 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
;/**************************************************************************/
;/* */
;/* FUNCTION RELEASE */
;/* */
;/* _tx_timer_interrupt ARCv2_EM/MetaWare */
;/* 6.1.9 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -69,6 +72,9 @@
;/* 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)

View File

@@ -336,7 +336,7 @@ VOID tx_thread_register_bank_assign(VOID *thread_ptr, UINT register_bank);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARC_HS/MetaWare Version 6.1.10 *";
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARC_HS/MetaWare Version 6.2.1 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];

View File

@@ -19,23 +19,16 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
;
;
;/* Include necessary system files. */
;
;#include "tx_api.h"
;#include "tx_initialize.h"
;
;
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
;/**************************************************************************/
;/* */
;/* FUNCTION RELEASE */
;/* */
;/* _tx_initialize_fast_interrupt_setup ARC_HS/MetaWare */
;/* 6.1 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -67,6 +60,9 @@
;/* 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_fast_interrupt_setup(VOID *stack_ptr)

View File

@@ -19,25 +19,18 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
;
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.equ BTA, 0x412
;
;/* Include necessary system files. */
;
;#include "tx_api.h"
;#include "tx_thread.h"
;#include "tx_timer.h"
;
;
;/**************************************************************************/
;/* */
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_context_fast_restore ARC_HS/MetaWare */
;/* 6.1 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -70,6 +63,9 @@
;/* 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_fast_restore(VOID)
@@ -115,7 +111,7 @@ __tx_thread_nested_restore:
__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)
; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
; || (_tx_thread_preempt_disable))
; {
;

View File

@@ -19,24 +19,16 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
;
;
;/* Include necessary system files. */
;
;#include "tx_api.h"
;#include "tx_thread.h"
;#include "tx_timer.h"
;
;
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
;/**************************************************************************/
;/* */
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_context_fast_save ARC_HS/MetaWare */
;/* 6.1 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -73,6 +65,9 @@
;/* 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_fast_save(VOID)

View File

@@ -18,6 +18,9 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.equ BTA, 0x412
@@ -26,7 +29,7 @@
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_context_restore ARC_HS/MetaWare */
;/* 6.1.9 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -63,6 +66,9 @@
;/* 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)

View File

@@ -18,6 +18,9 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.equ BTA, 0x412
@@ -26,7 +29,7 @@
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_context_save ARC_HS/MetaWare */
;/* 6.1.9 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -61,6 +64,9 @@
;/* 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)

View File

@@ -18,13 +18,16 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
;/**************************************************************************/
;/* */
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_interrupt_control ARC_HS/MetaWare */
;/* 6.1.6 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -57,6 +60,9 @@
;/* 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)

View File

@@ -19,23 +19,16 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
;
;
;#define TX_SOURCE_CODE
;
;
;/* Include necessary system files. */
;
;#include "tx_api.h"
;#include "tx_thread.h"
;
;
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
;/**************************************************************************/
;/* */
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_register_bank_assign ARC_HS/MetaWare */
;/* 6.1 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -69,6 +62,9 @@
;/* 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_register_bank_assign(VOID *thread_ptr, UINT register_bank)

View File

@@ -18,6 +18,9 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.equ BTA, 0x412
@@ -26,7 +29,7 @@
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_schedule ARC_HS/MetaWare */
;/* 6.1.9 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -63,6 +66,9 @@
;/* 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)

View File

@@ -18,6 +18,9 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.equ LONG_ALIGN_MASK, 0xFFFFFFFC
.equ INT_ENABLE_BITS, 0x8000001E
@@ -27,7 +30,7 @@
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_stack_build ARC_HS/MetaWare */
;/* 6.1.6 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -62,6 +65,9 @@
;/* 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))

View File

@@ -18,13 +18,16 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
;/**************************************************************************/
;/* */
;/* FUNCTION RELEASE */
;/* */
;/* _tx_thread_system_return ARC_HS/MetaWare */
;/* 6.1.9 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -60,6 +63,9 @@
;/* 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)

View File

@@ -18,13 +18,16 @@
;/** */
;/**************************************************************************/
;/**************************************************************************/
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
;/**************************************************************************/
;/* */
;/* FUNCTION RELEASE */
;/* */
;/* _tx_timer_interrupt ARC_HS/MetaWare */
;/* 6.1.9 */
;/* 6.2.1 */
;/* AUTHOR */
;/* */
;/* William E. Lamie, Microsoft Corporation */
@@ -69,6 +72,9 @@
;/* 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)

View File

@@ -320,7 +320,7 @@ unsigned int _tx_thread_interrupt_restore(UINT old_posture);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM11/AC5 Version 6.1.9 *";
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM11/AC5 Version 6.2.1 *";
#else
extern CHAR _tx_version_id[];
#endif

View File

@@ -139,7 +139,7 @@ _tx_thread_context_restore
__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)
; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
; || (_tx_thread_preempt_disable))
; {
;

View File

@@ -141,7 +141,7 @@ _tx_thread_fiq_context_restore
__tx_thread_fiq_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)
; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
; || (_tx_thread_preempt_disable))
; {
;

View File

@@ -309,7 +309,7 @@ unsigned int _tx_thread_interrupt_restore(UINT old_posture);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM11/GNU Version 6.1.9 *";
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM11/GNU Version 6.2.1 *";
#else
extern CHAR _tx_version_id[];
#endif

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@#include "tx_timer.h"
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.arm
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -60,7 +53,7 @@ IRQ_MODE = 0x92 @ Disable IRQ, IRQ mode
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_context_restore ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -93,6 +86,9 @@ IRQ_MODE = 0x92 @ Disable IRQ, IRQ mode
@/* 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)
@@ -138,7 +134,7 @@ _tx_thread_context_restore:
__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)
@ else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
@ || (_tx_thread_preempt_disable))
@ {
@

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@#include "tx_timer.h"
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
#ifdef TX_ENABLE_FIQ_SUPPORT
DISABLE_INTS = 0xC0 @ IRQ & FIQ interrupts disabled
#else
@@ -53,7 +46,7 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_context_save ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -85,6 +78,9 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
@/* 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)

View File

@@ -19,18 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@#include "tx_timer.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
SVC_MODE = 0xD3 @ SVC mode
FIQ_MODE = 0xD1 @ FIQ mode
DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
@@ -61,7 +53,7 @@ SVC_MODE_BITS = 0x13 @ SVC mode value
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_fiq_context_restore ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -94,6 +86,9 @@ SVC_MODE_BITS = 0x13 @ SVC mode value
@/* 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_fiq_context_restore(VOID)
@@ -140,7 +135,7 @@ _tx_thread_fiq_context_restore:
__tx_thread_fiq_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)
@ else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
@ || (_tx_thread_preempt_disable))
@ {
@

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.global _tx_thread_system_state
.global _tx_thread_current_ptr
.global __tx_fiq_processing_return
@@ -47,7 +40,7 @@
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_fiq_context_save ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -79,6 +72,9 @@
@/* 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_fiq_context_save(VOID)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
#ifdef TX_ENABLE_FIQ_SUPPORT
DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
@@ -50,7 +43,7 @@ FIQ_MODE_BITS = 0x11 @ FIQ mode bits
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_fiq_nesting_end ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -90,6 +83,9 @@ FIQ_MODE_BITS = 0x11 @ FIQ mode bits
@/* 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_fiq_nesting_end(VOID)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
FIQ_DISABLE = 0x40 @ FIQ disable bit
MODE_MASK = 0x1F @ Mode mask
SYS_MODE_BITS = 0x1F @ System mode bits
@@ -46,7 +39,7 @@ SYS_MODE_BITS = 0x1F @ System mode bits
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_fiq_nesting_start ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -83,6 +76,9 @@ SYS_MODE_BITS = 0x1F @ System mode bits
@/* 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_fiq_nesting_start(VOID)

View File

@@ -19,15 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h" */
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
INT_MASK = 0x03F
@@ -56,7 +51,7 @@ $_tx_thread_interrupt_control:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_interrupt_control ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -87,6 +82,9 @@ $_tx_thread_interrupt_control:
@/* 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 */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_control(UINT new_posture)

View File

@@ -19,16 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
#ifdef TX_ENABLE_FIQ_SUPPORT
DISABLE_INTS = 0xC0 @ IRQ & FIQ interrupts disabled
#else
@@ -60,7 +54,7 @@ $_tx_thread_interrupt_disable:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_interrupt_disable ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -90,6 +84,9 @@ $_tx_thread_interrupt_disable:
@/* 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 */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_disable(void)

View File

@@ -19,16 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
@/* Define the 16-bit Thumb mode veneer for _tx_thread_interrupt_restore for
@ applications calling this function from to 16-bit Thumb mode. */
@
@@ -53,7 +47,7 @@ $_tx_thread_interrupt_restore:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_interrupt_restore ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -84,6 +78,9 @@ $_tx_thread_interrupt_restore:
@/* 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 */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_restore(UINT old_posture)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
#ifdef TX_ENABLE_FIQ_SUPPORT
DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
@@ -50,7 +43,7 @@ IRQ_MODE_BITS = 0x12 @ IRQ mode bits
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_irq_nesting_end ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -90,6 +83,9 @@ IRQ_MODE_BITS = 0x12 @ IRQ mode bits
@/* 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_irq_nesting_end(VOID)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
IRQ_DISABLE = 0x80 @ IRQ disable bit
MODE_MASK = 0x1F @ Mode mask
SYS_MODE_BITS = 0x1F @ System mode bits
@@ -46,7 +39,7 @@ SYS_MODE_BITS = 0x1F @ System mode bits
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_irq_nesting_start ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -83,6 +76,9 @@ SYS_MODE_BITS = 0x1F @ System mode bits
@/* 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_irq_nesting_start(VOID)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@#include "tx_timer.h"
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
#ifdef TX_ENABLE_FIQ_SUPPORT
ENABLE_INTS = 0xC0 @ IRQ & FIQ Interrupts enabled mask
#else
@@ -68,7 +61,7 @@ $_tx_thread_schedule:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_schedule ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -102,6 +95,9 @@ $_tx_thread_schedule:
@/* 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_schedule(VOID)

View File

@@ -19,16 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.arm
SVC_MODE = 0x13 @ SVC mode
@@ -64,7 +58,7 @@ $_tx_thread_stack_build:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_stack_build ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -97,6 +91,9 @@ $_tx_thread_stack_build:
@/* 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_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))

View File

@@ -19,16 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@#include "tx_timer.h"
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.arm
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -70,7 +64,7 @@ $_tx_thread_system_return:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_system_return ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -103,6 +97,9 @@ $_tx_thread_system_return:
@/* 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)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
#ifdef TX_ENABLE_FIQ_SUPPORT
DISABLE_INTS = 0xC0 @ IRQ & FIQ interrupts disabled
#else
@@ -54,7 +47,7 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_vectored_context_save ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -86,6 +79,9 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
@/* 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_vectored_context_save(VOID)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_timer.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.arm
@
@@ -71,7 +64,7 @@ $_tx_timer_interrupt:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_timer_interrupt ARM11/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -106,6 +99,9 @@ $_tx_timer_interrupt:
@/* 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)

View File

@@ -375,7 +375,7 @@ void _tx_thread_interrupt_restore(UINT old_posture);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM11/IAR Version 6.1.9 *";
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM11/IAR Version 6.2.1 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];

View File

@@ -138,7 +138,7 @@ _tx_thread_context_restore
__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)
; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
; || (_tx_thread_preempt_disable))
; {
;

View File

@@ -139,7 +139,7 @@ _tx_thread_fiq_context_restore
__tx_thread_fiq_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)
; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
; || (_tx_thread_preempt_disable))
; {
;

View File

@@ -322,7 +322,7 @@ unsigned int _tx_thread_interrupt_restore(UINT old_posture);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM9/AC5 Version 6.1.9 *";
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM9/AC5 Version 6.2.1 *";
#else
extern CHAR _tx_version_id[];
#endif

View File

@@ -139,7 +139,7 @@ _tx_thread_context_restore
__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)
; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
; || (_tx_thread_preempt_disable))
; {
;

View File

@@ -141,7 +141,7 @@ _tx_thread_fiq_context_restore
__tx_thread_fiq_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)
; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
; || (_tx_thread_preempt_disable))
; {
;

View File

@@ -309,7 +309,7 @@ unsigned int _tx_thread_interrupt_restore(UINT old_posture);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM9/GNU Version 6.1.9 *";
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM9/GNU Version 6.2.1 *";
#else
extern CHAR _tx_version_id[];
#endif

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@#include "tx_timer.h"
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.arm
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -60,7 +53,7 @@ IRQ_MODE = 0x92 @ Disable IRQ, IRQ mode
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_context_restore ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -93,6 +86,9 @@ IRQ_MODE = 0x92 @ Disable IRQ, IRQ mode
@/* 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)
@@ -138,7 +134,7 @@ _tx_thread_context_restore:
__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)
@ else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
@ || (_tx_thread_preempt_disable))
@ {
@

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@#include "tx_timer.h"
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
#ifdef TX_ENABLE_FIQ_SUPPORT
DISABLE_INTS = 0xC0 @ IRQ & FIQ interrupts disabled
#else
@@ -53,7 +46,7 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_context_save ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -85,6 +78,9 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
@/* 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)

View File

@@ -19,18 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@#include "tx_timer.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
SVC_MODE = 0xD3 @ SVC mode
FIQ_MODE = 0xD1 @ FIQ mode
DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
@@ -61,7 +53,7 @@ SVC_MODE_BITS = 0x13 @ SVC mode value
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_fiq_context_restore ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -94,6 +86,9 @@ SVC_MODE_BITS = 0x13 @ SVC mode value
@/* 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_fiq_context_restore(VOID)
@@ -140,7 +135,7 @@ _tx_thread_fiq_context_restore:
__tx_thread_fiq_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)
@ else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
@ || (_tx_thread_preempt_disable))
@ {
@

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.global _tx_thread_system_state
.global _tx_thread_current_ptr
.global __tx_fiq_processing_return
@@ -47,7 +40,7 @@
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_fiq_context_save ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -79,6 +72,9 @@
@/* 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_fiq_context_save(VOID)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
#ifdef TX_ENABLE_FIQ_SUPPORT
DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
@@ -50,7 +43,7 @@ FIQ_MODE_BITS = 0x11 @ FIQ mode bits
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_fiq_nesting_end ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -90,6 +83,9 @@ FIQ_MODE_BITS = 0x11 @ FIQ mode bits
@/* 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_fiq_nesting_end(VOID)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
FIQ_DISABLE = 0x40 @ FIQ disable bit
MODE_MASK = 0x1F @ Mode mask
SYS_MODE_BITS = 0x1F @ System mode bits
@@ -46,7 +39,7 @@ SYS_MODE_BITS = 0x1F @ System mode bits
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_fiq_nesting_start ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -83,6 +76,9 @@ SYS_MODE_BITS = 0x1F @ System mode bits
@/* 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_fiq_nesting_start(VOID)

View File

@@ -19,15 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h" */
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
INT_MASK = 0x03F
@@ -56,7 +51,7 @@ $_tx_thread_interrupt_control:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_interrupt_control ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -87,6 +82,9 @@ $_tx_thread_interrupt_control:
@/* 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 */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_control(UINT new_posture)

View File

@@ -19,16 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
#ifdef TX_ENABLE_FIQ_SUPPORT
DISABLE_INTS = 0xC0 @ IRQ & FIQ interrupts disabled
#else
@@ -60,7 +54,7 @@ $_tx_thread_interrupt_disable:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_interrupt_disable ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -90,6 +84,9 @@ $_tx_thread_interrupt_disable:
@/* 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 */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_disable(void)

View File

@@ -19,16 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
@/* Define the 16-bit Thumb mode veneer for _tx_thread_interrupt_restore for
@ applications calling this function from to 16-bit Thumb mode. */
@
@@ -53,7 +47,7 @@ $_tx_thread_interrupt_restore:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_interrupt_restore ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -84,6 +78,9 @@ $_tx_thread_interrupt_restore:
@/* 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 */
@/* */
@/**************************************************************************/
@UINT _tx_thread_interrupt_restore(UINT old_posture)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
#ifdef TX_ENABLE_FIQ_SUPPORT
DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
#else
@@ -50,7 +43,7 @@ IRQ_MODE_BITS = 0x12 @ IRQ mode bits
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_irq_nesting_end ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -90,6 +83,9 @@ IRQ_MODE_BITS = 0x12 @ IRQ mode bits
@/* 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_irq_nesting_end(VOID)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
IRQ_DISABLE = 0x80 @ IRQ disable bit
MODE_MASK = 0x1F @ Mode mask
SYS_MODE_BITS = 0x1F @ System mode bits
@@ -46,7 +39,7 @@ SYS_MODE_BITS = 0x1F @ System mode bits
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_irq_nesting_start ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -83,6 +76,9 @@ SYS_MODE_BITS = 0x1F @ System mode bits
@/* 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_irq_nesting_start(VOID)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@#include "tx_timer.h"
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
#ifdef TX_ENABLE_FIQ_SUPPORT
ENABLE_INTS = 0xC0 @ IRQ & FIQ Interrupts enabled mask
#else
@@ -68,7 +61,7 @@ $_tx_thread_schedule:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_schedule ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -102,6 +95,9 @@ $_tx_thread_schedule:
@/* 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_schedule(VOID)

View File

@@ -19,16 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.arm
SVC_MODE = 0x13 @ SVC mode
@@ -64,7 +58,7 @@ $_tx_thread_stack_build:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_stack_build ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -97,6 +91,9 @@ $_tx_thread_stack_build:
@/* 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_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))

View File

@@ -19,16 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@#include "tx_timer.h"
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.arm
#ifdef TX_ENABLE_FIQ_SUPPORT
@@ -70,7 +64,7 @@ $_tx_thread_system_return:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_system_return ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -103,6 +97,9 @@ $_tx_thread_system_return:
@/* 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)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
#ifdef TX_ENABLE_FIQ_SUPPORT
DISABLE_INTS = 0xC0 @ IRQ & FIQ interrupts disabled
#else
@@ -54,7 +47,7 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
@/* FUNCTION RELEASE */
@/* */
@/* _tx_thread_vectored_context_save ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -86,6 +79,9 @@ DISABLE_INTS = 0x80 @ IRQ interrupts disabled
@/* 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_vectored_context_save(VOID)

View File

@@ -19,17 +19,10 @@
@/** */
@/**************************************************************************/
@/**************************************************************************/
@
@#define TX_SOURCE_CODE
@
@
@/* Include necessary system files. */
@
@#include "tx_api.h"
@#include "tx_timer.h"
@#include "tx_thread.h"
@
@
#ifdef TX_INCLUDE_USER_DEFINE_FILE
#include "tx_user.h"
#endif
.arm
@
@@ -71,7 +64,7 @@ $_tx_timer_interrupt:
@/* FUNCTION RELEASE */
@/* */
@/* _tx_timer_interrupt ARM9/GNU */
@/* 6.1 */
@/* 6.2.1 */
@/* AUTHOR */
@/* */
@/* William E. Lamie, Microsoft Corporation */
@@ -106,6 +99,9 @@ $_tx_timer_interrupt:
@/* 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)

View File

@@ -375,7 +375,7 @@ void _tx_thread_interrupt_restore(UINT old_posture);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM9/IAR Version 6.1.9 *";
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM9/IAR Version 6.2.1 *";
#else
#ifdef TX_MISRA_ENABLE
extern CHAR _tx_version_id[100];

View File

@@ -136,7 +136,7 @@ _tx_thread_context_restore
__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)
; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
; || (_tx_thread_preempt_disable))
; {
;

View File

@@ -138,7 +138,7 @@ _tx_thread_fiq_context_restore
__tx_thread_fiq_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)
; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
; || (_tx_thread_preempt_disable))
; {
;

View File

@@ -26,7 +26,7 @@
/* PORT SPECIFIC C INFORMATION RELEASE */
/* */
/* tx_port.h C667x/TI */
/* 6.1.6 */
/* 6.1.11 */
/* */
/* AUTHOR */
/* */
@@ -51,6 +51,10 @@
/* 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 */
/* */
/**************************************************************************/
@@ -125,7 +129,7 @@ typedef unsigned short USHORT;
#ifndef TX_TIMER_TICKS_PER_SECOND
#define TX_TIMER_TICKS_PER_SECOND ((ULONG) 100)
#define TX_TIMER_TICKS_PER_SECOND (100UL)
#endif
@@ -267,7 +271,7 @@ unsigned int _tx_thread_interrupt_control(unsigned int);
#ifdef TX_THREAD_INIT
CHAR _tx_version_id[] =
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX C667x/TI Version 6.1.9 *";
"Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX C667x/TI Version 6.2.1 *";
#else
extern CHAR _tx_version_id[];
#endif

View File

@@ -189,7 +189,7 @@ _tx_thread_context_restore:
_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)
; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr))
; || (_tx_thread_preempt_disable))
; {
;

View File

@@ -0,0 +1,369 @@
/* 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"
#define DEMO_STACK_SIZE 1024
#define DEMO_BYTE_POOL_SIZE 9120
#define DEMO_BLOCK_POOL_SIZE 100
#define DEMO_QUEUE_SIZE 100
/* 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)
{
/* 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)
{
/* 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)
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)
{
/* 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))
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)
{
/* 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)
{
/* 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)
{
/* 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;
}
}

View File

@@ -0,0 +1,176 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="com.arm.eclipse.build.config.v6.exe.debug.base.469946340">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.arm.eclipse.build.config.v6.exe.debug.base.469946340" moduleId="org.eclipse.cdt.core.settings" name="Debug">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="com.arm.eclipse.builder.armcc.error" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactExtension="axf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="clean" description="" id="com.arm.eclipse.build.config.v6.exe.debug.base.469946340" name="Debug" parent="com.arm.eclipse.build.config.v6.exe.debug.base">
<folderInfo id="com.arm.eclipse.build.config.v6.exe.debug.base.469946340." name="/" resourcePath="">
<toolChain id="com.arm.toolchain.v6.exe.debug.base.var.arm_compiler_6-6.573134568" name="Arm Compiler 6" superClass="com.arm.toolchain.v6.exe.debug.base.var.arm_compiler_6-6">
<option id="com.arm.toolchain.v6.base.options.target.cpu_fpu.84862199" superClass="com.arm.toolchain.v6.base.options.target.cpu_fpu" value="Cortex-A12.NoFPU" valueType="string"/>
<option id="com.arm.toolchain.v6.base.options.floatabi.57442314" name="Float ABI" superClass="com.arm.toolchain.v6.base.options.floatabi" value="com.arm.tool.c.compiler.v6.base.option.floatabi.soft" valueType="enumerated"/>
<option id="com.arm.toolchain.v6.base.options.inst.560764723" name="Instruction set" superClass="com.arm.toolchain.v6.base.options.inst" value="com.arm.tool.c.compiler.v6.base.option.inst.arm" valueType="enumerated"/>
<option id="com.arm.toolchain.v6.base.options.debug.level.480956369" name="Debug Level" superClass="com.arm.toolchain.v6.base.options.debug.level" value="com.arm.tool.c.compiler.v6.base.options.debug.level.std" valueType="enumerated"/>
<targetPlatform id="com.arm.toolchain.v6.exe.debug.base.var.arm_compiler_6-6.573134568.953059653" name=""/>
<builder autoBuildTarget="all" buildPath="${workspace_loc:/sample_threadx}/Debug" cleanBuildTarget="clean" enableAutoBuild="false" enableCleanBuild="true" enabledIncrementalBuild="true" id="com.arm.toolchain.v6.builder.2091893653" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="8" superClass="com.arm.toolchain.v6.builder"/>
<tool id="com.arm.tool.c.compiler.v6.base.var.arm_compiler_6-6.480843237" name="Arm C Compiler 6" superClass="com.arm.tool.c.compiler.v6.base.var.arm_compiler_6-6">
<option id="com.arm.tool.c.compiler.v6.base.option.target.665260895" name="Target (--target)" superClass="com.arm.tool.c.compiler.v6.base.option.target" useByScannerDiscovery="true" value="arm-arm-none-eabi" valueType="string"/>
<option id="com.arm.tool.c.compiler.v6.base.option.cpu.2102538095" name="CPU (-mcpu)" superClass="com.arm.tool.c.compiler.v6.base.option.cpu" useByScannerDiscovery="true" value="cortex-a7" valueType="string"/>
<option id="com.arm.tool.c.compiler.v6.base.option.fpu.633771589" name="FPU (-mfpu)" superClass="com.arm.tool.c.compiler.v6.base.option.fpu" useByScannerDiscovery="true" value="none" valueType="string"/>
<option id="com.arm.tool.c.compiler.v6.base.option.floatabi.1961565341" name="Float ABI (-mfloat-abi)" superClass="com.arm.tool.c.compiler.v6.base.option.floatabi" useByScannerDiscovery="true" value="com.arm.tool.c.compiler.v6.base.option.floatabi.soft" valueType="enumerated"/>
<option id="com.arm.tool.c.compiler.v6.base.option.inst.904338235" name="Instruction set" superClass="com.arm.tool.c.compiler.v6.base.option.inst" useByScannerDiscovery="true" value="com.arm.tool.c.compiler.v6.base.option.inst.arm" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.arm.tool.c.compiler.v6.base.option.incpath.1101243778" name="Include path (-I)" superClass="com.arm.tool.c.compiler.v6.base.option.incpath" useByScannerDiscovery="false" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/tx/inc_generic}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/tx/inc_port}&quot;"/>
</option>
<option id="com.arm.tool.c.compiler.v6.base.options.debug.level.1919910001" name="Debug Level" superClass="com.arm.tool.c.compiler.v6.base.options.debug.level" useByScannerDiscovery="true" value="com.arm.tool.c.compiler.v6.base.options.debug.level.std" valueType="enumerated"/>
<inputType id="com.arm.tool.c.compiler.v6.base.input.1889095542" superClass="com.arm.tool.c.compiler.v6.base.input"/>
</tool>
<tool id="com.arm.tool.cpp.compiler.v6.base.var.arm_compiler_6-6.1580367129" name="Arm C++ Compiler 6" superClass="com.arm.tool.cpp.compiler.v6.base.var.arm_compiler_6-6">
<option id="com.arm.tool.c.compiler.v6.base.options.debug.level.1827702550" name="Debug Level" superClass="com.arm.tool.c.compiler.v6.base.options.debug.level" useByScannerDiscovery="true" value="com.arm.tool.c.compiler.v6.base.options.debug.level.std" valueType="enumerated"/>
</tool>
<tool id="com.arm.tool.assembler.v6.base.var.arm_compiler_6-6.1929311259" name="Arm Assembler 6" superClass="com.arm.tool.assembler.v6.base.var.arm_compiler_6-6">
<option id="com.arm.tool.assembler.v6.base.option.target.748329430" name="Target (--target)" superClass="com.arm.tool.assembler.v6.base.option.target" useByScannerDiscovery="false" value="arm-arm-none-eabi" valueType="string"/>
<option id="com.arm.tool.assembler.v6.base.option.cpu.289232043" name="CPU (-mcpu)" superClass="com.arm.tool.assembler.v6.base.option.cpu" useByScannerDiscovery="false" value="cortex-a7" valueType="string"/>
<option id="com.arm.tool.assembler.v6.base.option.fpu.2069861530" name="FPU (-mfpu)" superClass="com.arm.tool.assembler.v6.base.option.fpu" useByScannerDiscovery="true" value="none" valueType="string"/>
<option id="com.arm.tool.assembler.v6.base.option.floatabi.1140611893" name="Float ABI (-mfloat-abi)" superClass="com.arm.tool.assembler.v6.base.option.floatabi" useByScannerDiscovery="true" value="com.arm.tool.c.compiler.v6.base.option.floatabi.soft" valueType="enumerated"/>
<option id="com.arm.tool.assembler.v6.base.option.inst.1944846971" name="Instruction set" superClass="com.arm.tool.assembler.v6.base.option.inst" useByScannerDiscovery="true" value="com.arm.tool.c.compiler.v6.base.option.inst.arm" valueType="enumerated"/>
<option id="com.arm.tool.assembler.v6.base.options.debug.level.1266868530" name="Debug Level" superClass="com.arm.tool.assembler.v6.base.options.debug.level" useByScannerDiscovery="false" value="com.arm.tool.assembler.v6.base.options.debug.level.std" valueType="enumerated"/>
<inputType id="com.arm.tool.assembler.v6.base.input.2014598915" superClass="com.arm.tool.assembler.v6.base.input"/>
</tool>
<tool id="com.arm.tool.c.linker.v6.base.var.arm_compiler_6-6.1841579990" name="Arm Linker 6" superClass="com.arm.tool.c.linker.v6.base.var.arm_compiler_6-6">
<option id="com.arm.tool.c.linker.option.entry.1438082076" name="Image entry point (--entry)" superClass="com.arm.tool.c.linker.option.entry" useByScannerDiscovery="false" value="Vectors" valueType="string"/>
<option id="com.arm.tool.c.linker.option.scatter.295049975" name="Scatter file (--scatter)" superClass="com.arm.tool.c.linker.option.scatter" useByScannerDiscovery="false" value="../sample_threadx.scat" valueType="string"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.arm.tool.c.linker.libs.1672250850" name="User library files" superClass="com.arm.tool.c.linker.libs" useByScannerDiscovery="false" valueType="libs">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/tx/Debug/tx.a}&quot;"/>
</option>
<option id="com.arm.tool.c.linker.option.imagemap.1579816297" name="Generate image map (--map)" superClass="com.arm.tool.c.linker.option.imagemap" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="com.arm.tool.c.linker.option.redirectoutput.1433429713" name="Redirect diagnostics output to file (--list)" superClass="com.arm.tool.c.linker.option.redirectoutput" useByScannerDiscovery="false" value="sample_threadx.map" valueType="string"/>
<option id="com.arm.tool.linker.v6.option.suppress.829979840" name="Suppress (--diag_suppress)" superClass="com.arm.tool.linker.v6.option.suppress" useByScannerDiscovery="false" value="L6306W" valueType="string"/>
</tool>
<tool id="com.arm.tool.librarian.v6.base.var.arm_compiler_6-6.305140315" name="Arm Librarian 6" superClass="com.arm.tool.librarian.v6.base.var.arm_compiler_6-6"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="timer_interrupts.c|MP_GIC.S|reset.S|crt0.S" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings">
<externalSettings containerId="tx;" factoryId="org.eclipse.cdt.core.cfg.export.settings.sipplier"/>
</storageModule>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="sample_threadx.com.arm.eclipse.build.project.v6.exe.1093829338" name="Executable"/>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="com.arm.projectSettings" version="6.0.0"/>
<storageModule moduleId="refreshScope" versionNumber="2">
<configuration configurationName="Debug">
<resource resourceType="PROJECT" workspacePath="/sample_threadx"/>
</configuration>
<configuration configurationName="Release">
<resource resourceType="PROJECT" workspacePath="/sample_threadx"/>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
</cproject>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>sample_threadx</name>
<comment></comment>
<projects>
<project>tx</project>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
</projectDescription>

View File

@@ -0,0 +1,369 @@
/* 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"
#define DEMO_STACK_SIZE 1024
#define DEMO_BYTE_POOL_SIZE 9120
#define DEMO_BLOCK_POOL_SIZE 100
#define DEMO_QUEUE_SIZE 100
/* 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)
{
/* 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)
{
/* 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)
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)
{
/* 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))
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)
{
/* 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)
{
/* 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)
{
/* 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;
}
}

Some files were not shown because too many files have changed in this diff Show More