Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Real time embedded FreeRTOS mailing list 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT Training




Loading

Problem found in vListInitialise ... FYI ONLY

Posted by Ricky on March 26, 2007
Port: STR912
Compiler: IAR, Embedded Workbench 4.0 Kickstart (ARM)
Optimize: Speed, maximum

I found a small problem in vListInitialise for the ARM9 port. This appears to be a compiler bug since the source code appears to be logically correct. This is just a FYI in case someone else is having the same problem as I am.

I created a library with the FreeRTOS ARM9 port that runs in Thumb mode. During debug, I was getting warning messages stating that an unaligned memory access was being performed and that the results were unpredictable. I traced the problem down to the vListInitialise function. The original function is shown below with a notation showing the line having the problem:

void vListInitialise( xList *pxList )
{
/* The list structure contains a list item which is used to mark the
end of the list. To initialise the list the list end is inserted
as the only list entry. */
pxList->pxIndex = ( xListItem * ) &( pxList->xListEnd );

/* The list end value is the highest possible value in the list to
ensure it remains at the end of the list. */
pxList->xListEnd.xItemValue = portMAX_DELAY;

/* The list end next and previous pointers point to itself so we know
when the list is empty. */
pxList->xListEnd.pxNext = ( xListItem * ) &( pxList->xListEnd ); <<< Problem line
pxList->xListEnd.pxPrevious = ( xListItem * ) &( pxList->xListEnd );

pxList->uxNumberOfItems = 0;
}

In the problem line above, the address of pxList->xListEnd wasn't being found properly. The previous line was setting register R1 to portMAX_DELAY, and the compiler was using that value in the next line as the pxList pointer, and then adding 8 to find pxList->xListEnd. portMAX_DELAY is 0xFFFFFFFF and adding 8 makes an address of 7, which was the value getting stored in pxList->xListEnd.pxNext.

I moved the "pxList->xListEnd.xItemValue = portMAX_DELAY;" line to just after the section that sets pxList->xListEnd.pxNext and pxList->xListEnd.pxPrevious and the compiler generated the correct code.

I'll be notifying IAR of this problem.

RE: Problem found in vListInitialise ... FYI ONLY

Posted by Richard on March 26, 2007
Thanks for your valuable feedback.

When you have maximum optimisation on I presume the "static clustering" option is selected. I have found static clustering to cause a problem with several IAR builds. It would be interesting to see if the problem goes away when this option is deselected, while retaining all the other optimisations.

Regards.


[ Back to the top ]    [ About FreeRTOS ]    [ Sitemap ]    [ ]




Copyright (C) 2004-2010 Richard Barry. Copyright (C) 2010-2016 Real Time Engineers Ltd.
Any and all data, files, source code, html content and documentation included in the FreeRTOSTM distribution or available on this site are the exclusive property of Real Time Engineers Ltd.. See the files license.txt (included in the distribution) and this copyright notice for more information. FreeRTOSTM and FreeRTOS.orgTM are trade marks of Real Time Engineers Ltd.

Latest News:

FreeRTOS V9.0.0 is now available for download.


Free TCP/IP and file system demos for the RTOS


Sponsored Links

⇓ Now With No Code Size Limit! ⇓
⇑ Free Download Without Registering ⇑


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Renesas Electronics Gold Alliance RTOS Partner.jpg

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Atmel RTOS partner supporting ARM Cortex-M3 and AVR32 microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Xilinx Microblaze and Zynq partner

Silicon Labs low power RTOS partner

Altera RTOS partner for Nios II and Cortex-A9 SoC

Freescale Alliance RTOS Member supporting ARM and ColdFire microcontrollers

Infineon ARM Cortex-M microcontrollers

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

Cypress RTOS partner supporting ARM Cortex-M3

Fujitsu RTOS partner supporting ARM Cortex-M3 and FM3

Microsemi (previously Actel) RTOS partner supporting ARM Cortex-M3

Atollic Partner

IAR Partner

Keil ARM Partner

Embedded Artists