• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..--

example_build/11-Mar-2024-10,57810,357

inc/11-Mar-2024-729422

src/11-Mar-2024-1,1481,031

readme_threadx.txtD11-Mar-20245.3 KiB160103

readme_threadx.txt

1                     Microsoft's Azure RTOS ThreadX for Cortex-M3
2
3                               Thumb & 32-bit Mode
4
5                    Using the Keil Microcontroller Development Kit
6
71.  Building the ThreadX run-time Library
8
9Building the ThreadX library is easy, simply load the project file
10ThreadX_Library.Uv2, which is located inside the "example_build" directory.
11
12Once the ThreadX library files are displayed in the project window,
13select the "Build Target" operation and observe the compilation and assembly
14of the ThreadX library. This project build produces the ThreadX library
15file ThreadX_Library.lib.
16
17
182.  Demonstration System
19
20The ThreadX demonstration is designed to execute under the Keil simulator or
21Cortex-M3 hardware. This demonstration is slightly smaller than typical ThreadX
22demonstrations, and thus requires less than 7KB of Flash and less than 4KB of RAM.
23
24Building the demonstration is easy; simply open the ThreadX demonstration
25project file ThreadX_Demo.Uv2, which is located inside the "example_build"
26directory.
27
28Once open, select the "Build Target" operation and observe the compilation of
29sample_threadx.c (which is the demonstration application) and linking with
30ThreadX_Library.lib. The resulting file ThreadX_Demo.axf is a binary file that
31can be downloaded and executed under the uVision simulator or Cortex-M3 hardware.
32
33For simulator execution, the following memory regions need to be defined via
34the "Debug -> Memory Map" dialog:
35
360x20000000, 0x20080000 [check read and write access]
370xE0000000, 0xE8000000 [check read and write access]
38
39
403.  System Initialization
41
42The entry point in ThreadX for the Cortex-M3 using Keil tools is at label
43__main. This is defined within the Keil compiler's startup code. In
44addition, this is where all static and global pre-set C variable
45initialization processing takes place.
46
47The ThreadX tx_initialize_low_level.s file is responsible for setting up
48various system data structures, the vector area, and a periodic timer interrupt
49source.
50
51In addition, _tx_initialize_low_level determines the first available
52address for use by the application, which is supplied as the sole input
53parameter to your application definition function, tx_application_define.
54
55
564.  Register Usage and Stack Frames
57
58The following defines the saved context stack frames for context switches
59that occur as a result of interrupt handling or from thread-level API calls.
60All suspended threads have the same stack frame in the Cortex-M3 version of
61ThreadX. The top of the suspended thread's stack is pointed to by
62tx_thread_stack_ptr in the associated thread control block TX_THREAD.
63
64
65  Stack Offset     Stack Contents
66
67     0x00               r4
68     0x04               r5
69     0x08               r6
70     0x0C               r7
71     0x10               r8
72     0x14               r9
73     0x18               r10
74     0x1C               r11
75     0x20               r0          (Hardware stack starts here!!)
76     0x24               r1
77     0x28               r2
78     0x2C               r3
79     0x30               r12
80     0x34               lr
81     0x38               pc
82     0x3C               xPSR
83
84
855.  Improving Performance
86
87The distribution version of ThreadX is built without any compiler
88optimizations. This makes it easy to debug because you can trace or set
89breakpoints inside of ThreadX itself. Of course, this costs some
90performance. To make it run faster, you can change the ThreadX_Library.Uv2
91project to debugging and enable all compiler optimizations.
92
93In addition, you can eliminate the ThreadX basic API error checking by
94compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
95defined.
96
97
986.  Interrupt Handling
99
100ThreadX provides complete and high-performance interrupt handling for Cortex-M3
101targets. There are a certain set of requirements that are defined in the
102following sub-sections:
103
104
1056.1  Vector Area
106
107The Cortex-M3 vectors start at the label __tx_vectors. The application may modify
108the vector area according to its needs.
109
110
1116.2 Managed Interrupts
112
113ISRs for Cortex-M can be written completely in C (or assembly language) without any
114calls to _tx_thread_context_save or _tx_thread_context_restore. These ISRs are allowed
115access to the ThreadX API that is available to ISRs.
116
117ISRs written in C will take the form (where "your_C_isr" is an entry in the vector table):
118
119void    your_C_isr(void)
120{
121
122    /* ISR processing goes here, including any needed function calls.  */
123}
124
125ISRs written in assembly language will take the form:
126
127    EXPORT  your_assembly_isr
128your_assembly_isr
129
130    PUSH    {r0, lr}
131
132    ; ISR processing goes here, including any needed function calls.
133
134    POP     {r0, lr}
135    BX      lr
136
137
138
1397.  Revision History
140
141For generic code revision information, please refer to the readme_threadx_generic.txt
142file, which is included in your distribution. The following details the revision
143information associated with this specific port of ThreadX:
144
14504-02-2021  Release 6.1.6 changes:
146            tx_port.h                           Updated macro definition
147            tx_thread_schedule.s                Fix compilation error
148
14903-02-2021  The following files were changed/added for version 6.1.5:
150            tx_thread_schedule.s            Added low power feature
151
15209-30-2020  Initial ThreadX 6.1 version for Cortex-M3 using Keil tools.
153
154
155Copyright(c) 1996-2020 Microsoft Corporation
156
157
158https://azure.com/rtos
159
160