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

..--

inc/11-Mar-2024-281105

src/11-Mar-2024-1,2881,086

readme_threadx.txtD11-Mar-20247 KiB175121

readme_threadx.txt

1                    Microsoft's Azure RTOS ThreadX for Renesas RXv2
2
3                                Using the IAR Tools
4
5
61.  Building the ThreadX run-time Library
7
8Please see the Samples repository on GitHub for the Azure RTOS demonstrations
9for the RXv2.
10
11
122.  Demonstration System
13
14Please see the Samples repository on GitHub for the Azure RTOS demonstrations
15for the RXv2.
16
17
183.  System Initialization
19
20The system entry point using the IAR tools is at the label __iar_program_start.
21
22The vector area is setup in the file tx_initialize_low_level.s. This file is also
23responsible for setting up various system data structures, interrupt vectors, and
24the periodic timer interrupt. This file is also an ideal place add hardware
25initialization code.
26
27The ThreadX demonstration for the RXv2 utilizes CMT0 as a periodic timer interrupt
28source. The CMT0 interrupt is typically setup for 10ms periodic interrupts and the
29interrupt priority level is set to level 5 with the symbol CMT_RX_CFG_IPR in
30r_cmt_rx_config.h of Renesas CMT timer module(r_cmt_rx). You may change any of the
31timer parameters as needed.
32
33In addition, _tx_initialize_low_level determines the first available address for use
34by the application, which is supplied as the sole input parameter to your application
35definition function, tx_application_define. The first available memory is determined
36by the location of the FREEMEM section so it should be placed AFTER all other RAM
37sections in your linker control file.
38
39
404.  Context Switch, Register Usage and Stack Frames
41
42The RXv2 port for ThreadX uses the first software interrupt, SWINT, i.e., interrupt #27,
43to perform context switch with the interrupt priority level 1. This ISR is thus reserved
44when using ThreadX and the SWINT should not be manipulated in any way by the application.
45The port will setup the interrupt within _tx_initialize_low_level and the compiler will
46automatically install the necessary interrupt vector. As such no additional initialization
47is necessary by the application.
48
49The following defines the saved context stack frame used by the ThreadX port. The
50state of the CPU registers at the time of a context switch is saved on the running
51thread's stack The top of the suspended thread's stack is pointed to by
52tx_thread_stack_ptr in the associated thread control block TX_THREAD.
53
54    Offset        Interrupted Stack Frame
55
56     0x00                   1
57     0x04                   ACC0
58     0x08                   ACC1
59     0x0C                   R6
60     0x10                   R7
61     0x14                   R8
62     0x18                   R9
63     0x1C                   R10
64     0x20                   R11
65     0x24                   R12
66     0x28                   R13
67     0x2C                   FPSW
68     0x30                   R14
69     0x34                   R15
70     0x38                   R3
71     0x3C                   R4
72     0x40                   R5
73     0x44                   R1
74     0x48                   R2
75     0x4C                   PC - return address
76     0x50                   PSW
77
78Note: By default IAR does not save the state of the accumulator registers ACC0 and ACC1
79when entering an ISR. This means that if the ISR uses any of the DSP instructions the
80content of those registers could be corrupted. Saving and restoring of the acummulators
81can be enabled by adding the --save_acc command line option.
82
83
845.  Improving Performance
85
86The distribution version of ThreadX is built without any compiler optimizations.  This
87makes it easy to debug because you can trace or set breakpoints inside of ThreadX itself.
88Of course, this costs some performance. To make ThreadX run faster, you can change the
89ThreadX Library project to disable debug information and enable the desired optimizations.
90
91In addition, you can eliminate the ThreadX basic API error checking by compiling your
92application code with the symbol TX_DISABLE_ERROR_CHECKING defined before tx_api.h
93is included.
94
95
966. Timer Processing
97
98Timer processign is performed by calling __tx_timer_interrupt(). This should usually be done
99from within the callback of a periodic timer with a period of 100Hz. In the sample projects
100a Renesas Fit CMT periodic timer module (r_cmt_rx) is used as the timer source.
101
102
1037.  Interrupt Handling
104
105Interrupt handling is unaffected by the ThreadX port as such user interrupts can be
106written according to the toolchain's documentation. It is recommended not to use interrupt
107priority 1 as this is the priority of the context switch interrupt. However using interrupt
108priority 1 won't cause any negative side effects but doing so may slightly reduce
109performance. Please refer to the toolchain documentation for additional details on how to
110define interrupt service routines.
111
112
1138. Execution Profiling
114
115The RX port adds support for the Execution Profiling Kit (EPK). The EPK consists
116of the files tx_execution_profile.c and tx_execution_profile.h. See the documentation
117of the EPK for generic usage details.
118
119To add the EPK to your RXv2 release make the following modifications:
120
121* Enable the following define for both the Threadx library and the application
122TX_EXECUTION_PROFILE_ENABLE
123
124* Setup CMT1 as a free running 16 bit timer.
125
126* In tx_execution_profile.h, change following around line 52:
127
128#ifdef TX_EXECUTION_64BIT_TIME
129typedef unsigned long long              EXECUTION_TIME;
130#define TX_EXECUTION_MAX_TIME_SOURCE    0xFFFFFFFFFFFFFFFF
131#else
132typedef unsigned long                   EXECUTION_TIME;
133#define TX_EXECUTION_MAX_TIME_SOURCE    0xFFFF
134#endif
135
136/* Define basic constants for the execution profile kit.  */
137
138#define TX_EXECUTION_TIME_SOURCE         (EXECUTION_TIME)  *((USHORT *) 0x8800A)
139
140Rebuild the Threadx library and the application.
141Refer to the EPK documentation how to interpret the results.
142
143
1449.  Revision History
145
146For generic code revision information, please refer to the readme_threadx_generic.txt
147file, which is included in your distribution. The following details the revision
148information associated with this specific port of ThreadX:
149
15004-25-2022  Release 6.1.11 changes:
151            tx_thread_schedule.s                Added low power support
152
15301-31-2022  Release 6.1.10 changes:
154            tx_port.h                           Removed system state macro, and added
155                                                missing interrupt control defines
156            tx_timer_interrupt.s                Added missing thread preemption logic
157
15810-15-2021  Release 6.1.9 changes:
159            tx_thread_context_restore.s         Removed unnecessary stack type placement
160            tx_thread_schedule.s                Removed unnecessary stack type checking
161            tx_thread_stack_build.s             Removed unnecessary stack type placement
162
16306-02-2021  Release 6.1.7 changes:
164            readme_threadx.txt                  Updated instructions on how to use execution profile.
165
16604-02-2021  Release 6.1.6 changes:
167            tx_port.h                           Updated macro definition
168
16912-31-2020  Initial ThreadX release for the RXv2using IAR tools, version 6.1.3
170
171
172Copyright(c) 1996-2022 Microsoft Corporation
173
174
175https://azure.com/rtos