mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-19 21:11:57 -04:00
Allow auto switching between creating tasks in ARM mode and THUMB mode.
This commit is contained in:
parent
b500ab8be2
commit
afaa3321ba
|
@ -3,14 +3,14 @@
|
||||||
|
|
||||||
This file is part of the FreeRTOS distribution.
|
This file is part of the FreeRTOS distribution.
|
||||||
|
|
||||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License (version 2) as published by the
|
the terms of the GNU General Public License (version 2) as published by the
|
||||||
Free Software Foundation and modified by the FreeRTOS exception.
|
Free Software Foundation and modified by the FreeRTOS exception.
|
||||||
**NOTE** The exception to the GPL is included to allow you to distribute a
|
**NOTE** The exception to the GPL is included to allow you to distribute a
|
||||||
combined work that includes FreeRTOS without being obliged to provide the
|
combined work that includes FreeRTOS without being obliged to provide the
|
||||||
source code for proprietary components outside of the FreeRTOS kernel.
|
source code for proprietary components outside of the FreeRTOS kernel.
|
||||||
Alternative commercial license and support terms are also available upon
|
Alternative commercial license and support terms are also available upon
|
||||||
request. See the licensing section of http://www.FreeRTOS.org for full
|
request. See the licensing section of http://www.FreeRTOS.org for full
|
||||||
license details.
|
license details.
|
||||||
|
|
||||||
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
|
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
@ -72,7 +72,8 @@
|
||||||
#define portRESET_COUNT_ON_MATCH ( ( unsigned portLONG ) 0x02 )
|
#define portRESET_COUNT_ON_MATCH ( ( unsigned portLONG ) 0x02 )
|
||||||
|
|
||||||
/* Constants required to setup the initial stack. */
|
/* Constants required to setup the initial stack. */
|
||||||
#define portINITIAL_SPSR ( ( portSTACK_TYPE ) 0x3f ) /* System mode, THUMB mode, interrupts enabled. */
|
#define portINITIAL_SPSR ( ( portSTACK_TYPE ) 0x1f ) /* System mode, ARM mode, interrupts enabled. */
|
||||||
|
#define portTHUMB_MODE_BIT ( ( portSTACK_TYPE ) 0x20 )
|
||||||
#define portINSTRUCTION_SIZE ( ( portSTACK_TYPE ) 4 )
|
#define portINSTRUCTION_SIZE ( ( portSTACK_TYPE ) 4 )
|
||||||
|
|
||||||
/* Constants required to setup the PIT. */
|
/* Constants required to setup the PIT. */
|
||||||
|
@ -165,6 +166,13 @@ portSTACK_TYPE *pxOriginalTOS;
|
||||||
|
|
||||||
/* The status register is set for system mode, with interrupts enabled. */
|
/* The status register is set for system mode, with interrupts enabled. */
|
||||||
*pxTopOfStack = ( portSTACK_TYPE ) portINITIAL_SPSR;
|
*pxTopOfStack = ( portSTACK_TYPE ) portINITIAL_SPSR;
|
||||||
|
|
||||||
|
if( ( ( unsigned long ) pxCode & 0x01UL ) != 0x00UL )
|
||||||
|
{
|
||||||
|
/* We want the task to start in thumb mode. */
|
||||||
|
*pxTopOfStack |= portTHUMB_MODE_BIT;
|
||||||
|
}
|
||||||
|
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
|
|
||||||
/* Interrupt flags cannot always be stored on the stack and will
|
/* Interrupt flags cannot always be stored on the stack and will
|
||||||
|
|
Loading…
Reference in a new issue