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] [June 2006 Threads] SemaphorePosted by Nobody/Anonymous on June 7, 2006 Hi! I have some doubts on semahore use for lock a resource (EEPROM). I try to define the semaphore, let's say in eeprom.c and initialize it:
static xSemaphoreHandle xSemaphoreEEPROM;
char eepromInit(void) { vSemaphoreCreateBinary( xSemaphoreEEPROM ); if( xSemaphoreEEPROM != NULL ) return 0; return 1; }
Then, can I have two files, each one with one different task that can test the semaphore xSemaphoreEEPROM before addressing the EEPROM, like: ... if( xSemaphoreTake( xSemaphoreEEPROM, ( portTickType ) timeout ) ) { /* Call function to write data on eeprom... */ xSemaphoreGive( xSemaphoreEEPROM ); } ... This can lock the resource, or the last code must be included in eeprom.c like a driver: char writeEEPROM (int addr, int n, char *data, int timeout) { if( xSemaphoreTake( xSemaphoreEEPROM, ( portTickType ) timeout ) ) { /* Write data... */ xSemaphoreGive( xSemaphoreEEPROM ); } }
Please give me some hint about this.
RE: SemaphorePosted by Nobody/Anonymous on June 9, 2006 What you say seems to be correct. You are using the semaphore to ensure mutual exclusion of the eeprom resource.
RE: SemaphorePosted by Nobody/Anonymous on June 9, 2006 I don't have experience in these kinf of OS's but there will eventually two task accessing the same function:
char writeEEPROM (int addr, int n, char *data, int timeout) { if( xSemaphoreTake( xSemaphoreEEPROM, ( portTickType ) timeout ) ) { /* Write data... */ xSemaphoreGive( xSemaphoreEEPROM ); } }
There is any problem when two tasks call the same function with a lock semaphore like the previous one? Or there is a better way to do this?
RE: SemaphorePosted by Nobody/Anonymous on June 9, 2006 Nope, this is exactly how semaphores should be used.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|