|
|||||||||||
Technical Support On-Line Manuals RL-ARM User's Guide (MDK v4) RL-RTX Overview Product Description Product Specification Technical Data Timing Specifications Advantages Your First RTX Application Theory of Operation Timer Tick Interrupt System Task Manager Task Management Idle Task System Resources Scheduling Options Pre-emptive Scheduling Round-Robin Scheduling Cooperative Multitasking Priority Inversion Stack Management User Timers Interrupt Functions Configuring RL-RTX Configuration Options Tasks Stack Size Stack Checking Run in Privileged Mode Hardware Timer Round-Robin Multitasking User Timers FIFO Queue Buffer Idle Task Error Function Create New RTX_Config.c Configuration Macros Alternate Tick Timer Low Power RTX Library Files Using RL-RTX Writing Programs Include Files Defining Tasks Multiple Instances External References Using a Mailbox SWI Functions SVC Functions Debugging System Info Task Info Event Viewer Usage Hints ARM7/ARM9 Version Cortex-M Version Create New RTX Application Function Reference Event Flag Management Routines Mailbox Management Routines Memory Allocation Routines Mutex Management Routines Semaphore Management Routines System Functions Task Management Routines Time Management Routines User Timer Management Routines RL-FlashFS RL-TCPnet RL-CAN RL-USB Example Programs Library Reference Appendix |
ARM7/ARM9 VersionHere are a few hints specific for ARM7™/ARM9™ library version. Using IRQ interruptsYou can use IRQ interrupts with no limitation. RTX kernel uses only one timer interrupt to generate periodic timer ticks and activate the task scheduler.
Using FIQ interruptsARM7™/ARM9™ Fast Interrupts are not used by the RTX kernel. You may freely use FIQ interrupts in you application in parallel with the kernel.
System StartupRTX kernel uses a separate stack for each task it creates. The stack size is configured in the configuration file. However, before the kernel is started by the os_sys_init() function, the stack that is configured in the startup file STARTUP.S for the User Mode is used. When the RTX kernel is up and running, the User Mode stack is used for the task manager - an RTX task scheduler. Minimum stack sizes for RTX kernel configured in STARTUP.S are:
Supervisor Mode stack is used when SWI functions are called. If you are using your own complex __swi functions, you might also need to increase the size of this stack. Interrupt Mode stack is used on timer tick interrupts. This interrupt activates the system task scheduler. The scheduler uses the User/System Mode stack defined in STARTUP.S and runs in System Mode. If you are using interrupts in your application, you should increase the size of the Interrupt Mode stack. A stack size of 256 bytes is a good choice for a start. If the interrupt stack overflows, the application might crash. User Mode stack is used until the kernel is started. It is better to initialize the user application from the first task which is created and started by the os_sys_init() function call. You can initialize simple IO, like configure the port pins and enable AD converter, before the os_sys_init() function is called. The init_IO() function must be small and must not use many local variables because the User Mode stack can overflow otherwise. void main (void) { /* Here a simple IO may be initialized. */ init_IO (); os_sys_init (task1); /* The program execution shall never reach this point. */ for (;;); } It is better to do a complex initialization from the first task that starts. In this case, the stack for this task is used, which is in general much bigger than User Mode stack. __task void task1 (void) { /* Here the interrupts and more complex IO may be initialized. */ Init_CAN (); .. } | ||||||||||
|
Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.