This message will disappear after all relevant tasks have been resolved.
Semantic MediaWiki
There are 1 incomplete or pending task to finish installation of Semantic MediaWiki. An administrator or user with sufficient rights can complete it. This should be done before adding new data to avoid inconsistencies.1. Overview of Azure RTOS ThreadX OS
- Picokernel, preemption-threshold, event-chaining unique features
- Execution profiling and performance metrics
- Totally available in source code (ANSI C and assembler)
- Safety Certifications (TÜV, MISRA, UL)
- Integrated with other Azure RTOS components:
- USBX
- NETX and NETXDUO
- FILEX
- LEVELX
- TRACEX
Fully detailed description of ThreadX OS features and benefits can be found here: Microsoft AzureRTOS ThreadX Documentation
1.1. ThreadX code organization
File:ThreadXStructure.png
ThreadX folders organization
Main folders descriptions
- cmake: original build system (not mandatory)
- common: mcu architecture independent source code
- common_modules: module feature (see: ThreadX Modules)
- common_smp: Symmetric Multi Processing feature (see: ThreadX SMP)
- docs: Just a dependency tree of Azure RTOS components
- ports: mcu architecture dependent (M3, M4, M33,...)
- ports_module: architecture dependent module code
- ports_smp: architecture dependent smp code
- samples: Microsoft example code (demo_threadx.c)
- utility:
- benchmarks: Thread-Metric test suite
- execution_profile_kit: thread execution time tracker
- low_power: Low power management files
- rtos_compatibility_layers: adaptation layers (FreeRTOS, Posix, OSEK)
- benchmarks: Thread-Metric test suite
1.2. ThreadX way of working
A typical ThreadX application could be similar to this one (courtesy of Microsoft):
#include "tx_api.h"
unsigned long my_thread_counter = 0;
TX_THREAD my_thread;
main( )
{
/* Enter the ThreadX kernel. */
tx_kernel_enter( );
}
void tx_application_define(void *first_unused_memory)
{
/* Create my_thread! */
tx_thread_create(&my_thread, "My Thread",
my_thread_entry, 0x1234, first_unused_memory, 1024,
3, 3, TX_NO_TIME_SLICE, TX_AUTO_START);
}
void my_thread_entry(ULONG thread_input)
{
/* Enter into a forever loop. */
while(1)
{
/* Increment thread counter. */
my_thread_counter++;
/* Sleep for 1 tick. */
tx_thread_sleep(1);
}
}
tx_application_define
Here we have the creation of ThreadX resources (threads, semaphores, mutexes, events, queues,...). At least one thread must be created, other threads and resources could be created later.
tx_kernel_enter
With this call the application will give the control to the OS, tx_application_define will be called and the OS scheduler will be in charge to select the first thread (ready) to run