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] [February 2009 Threads] Is this ok? getSemaphoreSPI();Posted by Willem on February 9, 2009 Hi,
I have created this function to get the semaphore:
unsigned char getSemaphoreSPI(void) { if(xSemaphoreSPI != NULL) { if( xSemaphoreTake( xSemaphoreSPI, ( portTickType ) 10000 ) == pdTRUE ) // try to take the sem., block max. 10sec { return pdTRUE; } } return pdFALSE; }
I have 3 different tasks that try to take this semaphore, it is possible that they come all at the same time.
Is there a limit on the number of tasks that are requesting a mutex?
RE: Is this ok? getSemaphoreSPI();Posted by Dave on February 9, 2009 The function looks fine and there is no limit on how many tasks can call the function. However other than checking that the semaphore is not null, your function just returns what xSemaphoreTake() returns, so why not just call xSemaphoreTake() directly.
RE: Is this ok? getSemaphoreSPI();Posted by Prithwee on February 9, 2009 I think Something like this code will do !!
if( xSemaphoreSPI != NULL ){ if( xSemaphoreTake(xSemaphoreSPI ,( portTickType )BLOCK_TIME)){ /* Shared resources or functions here.... */ xSemaphoreGive( xSemaphoreSPI ); } }
>>I have 3 different tasks that try to take this semaphore, it is possible that they come all at the same time. > 3 different tasks cant access the shared resources at same time. >>Is there a limit on the number of tasks that are requesting a mutex? > NO Limit.
Regards, Prithwee
RE: Is this ok? getSemaphoreSPI();Posted by Willem on February 9, 2009 I have other task that then uses this function like this:
void setRelay(unsigned char setRelayNo, unsigned char onOff ) { if( (getSemaphoreSPI() == pdTRUE) ) { // critical code xSemaphoreGive( xSemaphoreSPI ); }
and
void pwm1SwitchDirection(unsigned char direction) { if(getSemaphoreSPI() == pdTRUE) { // critical code xSemaphoreGive( xSemaphoreSPI ); } etc.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|