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

..--

inc/11-Mar-2024-721368

src/11-Mar-2024-3,4241,394

CMakeLists.txtD11-Mar-20241 KiB2220

readme_threadx.txtD11-Mar-20246.6 KiB211155

readme_threadx.txt

1                     Microsoft's Azure RTOS ThreadX for Cortex-M55
2
3                              Using the GNU Tools
4
51.  Building the ThreadX run-time Library
6
7Import all ThreadX common and port-specific source files into a GNU project.
8Configure the project to build a library rather than an executable. This
9results in the ThreadX run-time library file tx.a, which is needed by
10the application.
11Files tx_thread_stack_error_handler.c and tx_thread_stack_error_notify.c
12replace the common files of the same name.
13
142.  Demonstration System
15
16No demonstration project is provided.
17
18
193.  System Initialization
20
21The entry point in ThreadX for the Cortex-M55 using gnu tools uses the standard GNU
22Cortex-M55 reset sequence. From the reset vector the C runtime will be initialized.
23
24The ThreadX tx_initialize_low_level.S file is responsible for setting up
25various system data structures, the vector area, and a periodic timer interrupt
26source.
27
28In addition, _tx_initialize_low_level determines the first available
29address for use by the application, which is supplied as the sole input
30parameter to your application definition function, tx_application_define.
31
32
334.  Register Usage and Stack Frames
34
35The following defines the saved context stack frames for context switches
36that occur as a result of interrupt handling or from thread-level API calls.
37All suspended threads have the same stack frame in the Cortex-M55 version of
38ThreadX. The top of the suspended thread's stack is pointed to by
39tx_thread_stack_ptr in the associated thread control block TX_THREAD.
40
41Non-FPU Stack Frame:
42
43    Stack Offset    Stack Contents
44
45    0x00            LR          Interrupted LR (LR at time of PENDSV)
46    0x04            r4          Software stacked GP registers
47    0x08            r5
48    0x0C            r6
49    0x10            r7
50    0x14            r8
51    0x18            r9
52    0x1C            r10
53    0x20            r11
54    0x24            r0          Hardware stacked registers
55    0x28            r1
56    0x2C            r2
57    0x30            r3
58    0x34            r12
59    0x38            lr
60    0x3C            pc
61    0x40            xPSR
62
63FPU Stack Frame (only interrupted thread with FPU enabled):
64
65    Stack Offset    Stack Contents
66
67    0x00            LR          Interrupted LR (LR at time of PENDSV)
68    0x04            s16         Software stacked FPU registers
69    0x08            s17
70    0x0C            s18
71    0x10            s19
72    0x14            s20
73    0x18            s21
74    0x1C            s22
75    0x20            s23
76    0x24            s24
77    0x28            s25
78    0x2C            s26
79    0x30            s27
80    0x34            s28
81    0x38            s29
82    0x3C            s30
83    0x40            s31
84    0x44            r4          Software stacked registers
85    0x48            r5
86    0x4C            r6
87    0x50            r7
88    0x54            r8
89    0x58            r9
90    0x5C            r10
91    0x60            r11
92    0x64            r0          Hardware stacked registers
93    0x68            r1
94    0x6C            r2
95    0x70            r3
96    0x74            r12
97    0x78            lr
98    0x7C            pc
99    0x80            xPSR
100    0x84            s0          Hardware stacked FPU registers
101    0x88            s1
102    0x8C            s2
103    0x90            s3
104    0x94            s4
105    0x98            s5
106    0x9C            s6
107    0xA0            s7
108    0xA4            s8
109    0xA8            s9
110    0xAC            s10
111    0xB0            s11
112    0xB4            s12
113    0xB8            s13
114    0xBC            s14
115    0xC0            s15
116    0xC4            fpscr
117
118
1195.  Improving Performance
120
121To make ThreadX and the application(s) run faster, you can enable
122all compiler optimizations.
123
124In addition, you can eliminate the ThreadX basic API error checking by
125compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
126defined.
127
128
1296.  Interrupt Handling
130
131ThreadX provides complete and high-performance interrupt handling for Cortex-M55
132targets. There are a certain set of requirements that are defined in the
133following sub-sections:
134
135
1366.1  Vector Area
137
138The Cortex-M55 vectors start at the label __tx_vectors or similar. The application may modify
139the vector area according to its needs. There is code in tx_initialize_low_level() that will
140configure the vector base register.
141
142
1436.2 Managed Interrupts
144
145ISRs can be written completely in C (or assembly language) without any calls to
146_tx_thread_context_save or _tx_thread_context_restore. These ISRs are allowed access to the
147ThreadX API that is available to ISRs.
148
149ISRs written in C will take the form (where "your_C_isr" is an entry in the vector table):
150
151void    your_C_isr(void)
152{
153
154    /* ISR processing goes here, including any needed function calls.  */
155}
156
157ISRs written in assembly language will take the form:
158
159
160    .global  your_assembly_isr
161    .thumb_func
162your_assembly_isr:
163    PUSH    {r0, lr}
164;
165;    /* Do interrupt handler work here */
166;    /* BL <your interrupt routine in C> */
167
168    POP     {r0, lr}
169    BX      lr
170
171Note: the Cortex-M55 requires exception handlers to be thumb labels, this implies bit 0 set.
172To accomplish this, the declaration of the label has to be preceded by the assembler directive
173.thumb_func to instruct the linker to create thumb labels. The label __tx_IntHandler needs to
174be inserted in the correct location in the interrupt vector table. This table is typically
175located in either your runtime startup file or in the tx_initialize_low_level.S file.
176
177
1787. FPU Support
179
180ThreadX for Cortex-M55 supports automatic ("lazy") VFP support, which means that applications threads
181can simply use the VFP and ThreadX automatically maintains the VFP registers as part of the thread
182context.
183
184
1858.  Revision History
186
187For generic code revision information, please refer to the readme_threadx_generic.txt
188file, which is included in your distribution. The following details the revision
189information associated with this specific port of ThreadX:
190
19106-02-2021  Release 6.1.7 changes:
192            tx_thread_secure_stack_initialize.S New file
193            tx_thread_schedule.S                Added secure stack initialize to SVC hander
194            tx_thread_secure_stack.c            Fixed stack pointer save, initialize in handler mode
195
19604-02-2021  Release 6.1.6 changes:
197            tx_port.h                           Updated macro definition
198            tx_thread_schedule.s                Added low power support
199
20003-02-2021  The following files were changed/added for version 6.1.5:
201            tx_port.h                       Added ULONG64_DEFINED
202
20309-30-2020  Initial ThreadX 6.1 version for Cortex-M55 using GNU tools.
204
205
206Copyright(c) 1996-2020 Microsoft Corporation
207
208
209https://azure.com/rtos
210
211