FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [December 2012 Threads] Context swtiching stoppingPosted by DiBosco on December 17, 2012 Folks,
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.
Thanks!
RE: Context swtiching stoppingPosted 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?
http://www.freertos.org/FAQ-how-to-use-the-FreeRTOS-support-forum.html
Regards.
RE: Context swtiching stoppingPosted 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(); xSemaphoreGive(xSPI1Mutex); if (NewKeys != 0xF0000000) { // Debounce done here if (Change != 0) { Keys = NewKeys; FindKeyChanges(Change,NewKeys); } Bounce = NewKeys; vTaskDelay(50); }
Some details are included as comments for reducing amount of code. Is that any help?
RE: Context swtiching stoppingPosted 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 stoppingPosted 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.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|