Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem


Context swtiching stopping

Posted by DiBosco on December 17, 2012

I am getting a weird problem where sometimes, when coming out of or going in to one mode (this mode is purely how I have written the software, nothing to do with FreeRTOS) in my keypad, the OS stops working properly. I can see that the keypad is reading keys and putting the keypress into a queue. However, the task that reads that keypress no longer gets executed. In fact, it looks like no other task, other than the one that reads keypresses and puts them into a queue gets pressed.

Can anyone give me any pointers as to what this might be happening? Google searches have talked about coming out of interrupt routines, but there are no interrupts being called in this mode.


RE: Context swtiching stopping

Posted by Richard on December 17, 2012
I'm afraid nobody can even start to provide assistance as you have not told us which port you are using, or told us anything about the structure of your tasks or interrupts. For example, how are the key presses communicated?



RE: Context swtiching stopping

Posted by DiBosco on December 18, 2012
Fair enough.

I'm running the STM32 with Crossworks on bespoke hardware that's been running fine for well over two years. I haven't touched any interrupts from how it came.

Key presses are communicated via a queue:

xQueueSend(xKeyQueue, &MappedKey, portMAX_DELAY );

They are received here in a different thread:

if (xQueueReceive(xKeyQueue,&KeyInQueue,portMAX_DELAY) == pdPASS)

This and any other thread are no longer called. Only the thread that places key presses in the queue is now called.

This is the code it seems to get stuck going round and round in and not switching out of:

for ( ; ; )
xSemaphoreTake(xSPI1Mutex, portMAX_DELAY);
NewKeys = GetAllKeys();
if (NewKeys != 0xF0000000)
// Debounce done here
if (Change != 0)
Keys = NewKeys;
Bounce = NewKeys;


Some details are included as comments for reducing amount of code. Is that any help?

RE: Context swtiching stopping

Posted by Dave on December 18, 2012
Because your task calls vTaskDelay() another task should always execute. It might be that the only task that executes is the idle task if the task that receives the keys is in a state that does not allow it to continue. So the problem might be in the receiving task not the task that still executes.

As this is an STM32, did you call NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); before starting the scheduler? This is apparently needed on ST parts but not normally other manufacturers Cortex parts because of differences in the initialized state.

Is you system using interrupts? If so, have you seen the pages on the FreeRTOS.org site about how to use interrupts on Cortex chips, and the most common sources of problem FAQ?

RE: Context swtiching stopping

Posted by DiBosco on December 18, 2012
Dave, the tip about NVIC_PriorityGroupConfig seems to have done the trick, thanks. I commented it out, I think when I was trying to resolve a bootloader problem. This may stop the bootloader working, but seems to have sorted this. Many thanks.

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

Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Latest News

Meet Richard Barry and learn what's new in the FreeRTOS project at Embedded World 2019

NXP tweet showing LPC5500 (ARMv8-M Cortex-M33) running FreeRTOS.

Version 10.1.1 of the FreeRTOS kernel is available for immediate download. MIT licensed.

View a recording of the "OTA Update Security and Reliability" webinar, presented by TI and AWS.


FreeRTOS and other embedded software careers at AWS.

FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Espressif ESP32

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers



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

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

OpenRTOS and SafeRTOS

Xilinx Microblaze and Zynq partner