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