This repository has been archived on 2023-11-05. You can view files and clone it, but cannot push or open issues or pull requests.
FreeRTOS-Kernel/portable
magicse7en 82df39764a
Xtensa: fix the coproc_area incorrect issue (#117)
* Xtensa: fix the coproc_area incorrect issue

foss-xtensa/amazon-freertos#2 mentioned a issue:
1.
In function pxPortInitialiseStack(StackType_t *pxTopOfStack....)
p = (uint32_t *)(((uint32_t) pxTopOfStack - XT_CP_SIZE) & ~0xf);

In function prvInitialiseNewTask (file: task.c)
pxTopOfStack = (pxStack + (ulStackDepth - 1)) & (~portBYTE_ALIGNMENT_MASK)

So the co-processor area is at
p = (uint32_t *)(((uint32_t)((pxStack + (ulStackDepth - 1)) & (~portBYTE_ALIGNMENT_MASK)) - XT_CP_SIZE) & ~0xf);

2.
In function vPortStoreTaskMPUSettings( .... , StackType_t pxBottomOfStack ...)
xMPUSettings->coproc_area = (StackType_t)((((uint32_t)(pxBottomOfStack + usStackDepth - 1)) - XT_CP_SIZE) & ~0xf);

pxBottomOfStack = pxStack

=> xMPUSettings->coproc_area = (StackType_t*)((((uint32_t)(pxStack+ ulStackDepth - 1)) - XT_CP_SIZE ) & ~0xf);

The p is coproc_area that should be equal to xMPUSettings->coproc_area.

For example, assume pxStack is 0xa0000000, ulStackDepth is 0x2000,
portBYTE_ALIGNMENT_MASK is 0x7f, XT_CP_SIZE is 0x100.

The p = (uint32_t)(((uint32_t)((pxStack + (ulStackDepth - 1)) & (~portBYTE_ALIGNMENT_MASK)) - XT_CP_SIZE) & ~0xf)
      = 0xa0001e80
The xMPUSettings->coproc_area = (StackType_t)((((uint32_t)(pxStack+ usStackDepth - 1)) - XT_CP_SIZE ) & ~0xf)
                              = 0xa0001ef0
Obviously, the p is not equal to the xMPUSettings->coproc_area, which will cause context switching error.

Signed-off-by: magicse7en <magicse7en@outlook.com>

* Update port.c

Co-authored-by: Carl Lundin <53273776+lundinc2@users.noreply.github.com>
2020-10-26 11:47:21 -07:00
..
ARMClang Re-sync with upstream and stripping away none kernel related. 2020-02-10 13:45:57 -08:00
ARMv8M Update History.txt and fix versioning in asm files (#177) 2020-09-18 08:05:13 -07:00
BCC/16BitDOS Update version number to 10.4.1 (#173) 2020-09-17 15:25:15 -07:00
CCS Update version number to 10.4.1 (#173) 2020-09-17 15:25:15 -07:00
CodeWarrior Update History.txt and fix versioning in asm files (#177) 2020-09-18 08:05:13 -07:00
Common Recently vTaskDelayUntil() was updated to xTaskDelayUntil() because the function now returns a value. The PR didn't make the same change in the MPU port, or update the constants required to include the xTaskDelayUntil() function in the build. (#199) 2020-10-11 14:04:49 -07:00
GCC Maintenance: Add readme.txt in each Renesas RX folder to show recommended port (#152) 2020-09-28 00:09:49 -07:00
IAR Maintenance: Add readme.txt in each Renesas RX folder to show recommended port (#152) 2020-09-28 00:09:49 -07:00
Keil Re-sync with upstream and stripping away none kernel related. 2020-02-10 13:45:57 -08:00
MemMang Update version number to 10.4.1 (#173) 2020-09-17 15:25:15 -07:00
MikroC/ARM_CM4F Update version number to 10.4.1 (#173) 2020-09-17 15:25:15 -07:00
MPLAB Fix Stack alignment for Microchip PIC32MX port (#182) 2020-09-28 00:16:18 -07:00
MSVC-MingW Update version number to 10.4.1 (#173) 2020-09-17 15:25:15 -07:00
oWatcom/16BitDOS Update version number to 10.4.1 (#173) 2020-09-17 15:25:15 -07:00
Paradigm/Tern_EE Update version number to 10.4.1 (#173) 2020-09-17 15:25:15 -07:00
Renesas Maintenance: Add readme.txt in each Renesas RX folder to show recommended port (#152) 2020-09-28 00:09:49 -07:00
Rowley Update version number to 10.4.1 (#173) 2020-09-17 15:25:15 -07:00
RVDS Update History.txt and fix versioning in asm files (#177) 2020-09-18 08:05:13 -07:00
SDCC/Cygnal Update version number to 10.4.1 (#173) 2020-09-17 15:25:15 -07:00
Softune Update version number to 10.4.1 (#173) 2020-09-17 15:25:15 -07:00
Tasking/ARM_CM4F Update version number to 10.4.1 (#173) 2020-09-17 15:25:15 -07:00
ThirdParty Xtensa: fix the coproc_area incorrect issue (#117) 2020-10-26 11:47:21 -07:00
WizC/PIC18 Update version number to 10.4.1 (#173) 2020-09-17 15:25:15 -07:00
readme.txt Style: Change FreeRTOS websites in comments (#131) 2020-08-20 14:59:28 -07:00

Each real time kernel port consists of three files that contain the core kernel
components and are common to every port, and one or more files that are
specific to a particular microcontroller and/or compiler.


+ The FreeRTOS/Source/Portable/MemMang directory contains the five sample
memory allocators as described on the https://www.FreeRTOS.org WEB site.

+ The other directories each contain files specific to a particular
microcontroller or compiler, where the directory name denotes the compiler
specific files the directory contains.



For example, if you are interested in the [compiler] port for the [architecture]
microcontroller, then the port specific files are contained in
FreeRTOS/Source/Portable/[compiler]/[architecture] directory.  If this is the
only port you are interested in then all the other directories can be
ignored.