You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
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>
4 years ago
..
ARMClang Re-sync with upstream and stripping away none kernel related. 5 years ago
ARMv8M Update History.txt and fix versioning in asm files (#177) 4 years ago
BCC/16BitDOS Update version number to 10.4.1 (#173) 4 years ago
CCS Update version number to 10.4.1 (#173) 4 years ago
CodeWarrior Update History.txt and fix versioning in asm files (#177) 4 years ago
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) 4 years ago
GCC Maintenance: Add readme.txt in each Renesas RX folder to show recommended port (#152) 4 years ago
IAR Maintenance: Add readme.txt in each Renesas RX folder to show recommended port (#152) 4 years ago
Keil Re-sync with upstream and stripping away none kernel related. 5 years ago
MPLAB Fix Stack alignment for Microchip PIC32MX port (#182) 4 years ago
MSVC-MingW Update version number to 10.4.1 (#173) 4 years ago
MemMang Update version number to 10.4.1 (#173) 4 years ago
MikroC/ARM_CM4F Update version number to 10.4.1 (#173) 4 years ago
Paradigm/Tern_EE Update version number to 10.4.1 (#173) 4 years ago
RVDS Update History.txt and fix versioning in asm files (#177) 4 years ago
Renesas Maintenance: Add readme.txt in each Renesas RX folder to show recommended port (#152) 4 years ago
Rowley Update version number to 10.4.1 (#173) 4 years ago
SDCC/Cygnal Update version number to 10.4.1 (#173) 4 years ago
Softune Update version number to 10.4.1 (#173) 4 years ago
Tasking/ARM_CM4F Update version number to 10.4.1 (#173) 4 years ago
ThirdParty Xtensa: fix the coproc_area incorrect issue (#117) 4 years ago
WizC/PIC18 Update version number to 10.4.1 (#173) 4 years ago
oWatcom/16BitDOS Update version number to 10.4.1 (#173) 4 years ago
readme.txt Style: Change FreeRTOS websites in comments (#131) 5 years ago

readme.txt

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

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.