Skip to content
This repository has been archived by the owner on Aug 19, 2021. It is now read-only.

Commit

Permalink
Added rudimentary FreeRTOS implementation
Browse files Browse the repository at this point in the history
Mostly based on the *FromISR set of functions to be compatible with
critical sections/interrupt contexts.

equeue_tick  = xTaskGetTickCountFromISR
equeue_mutex = taskENTER_CRITICAL_FROM_ISR
equeue_sema  = xSemaphoreCreateBinaryStatic
  • Loading branch information
geky committed Aug 16, 2016
1 parent 3158e58 commit 4d63870
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 0 deletions.
61 changes: 61 additions & 0 deletions equeue_freertos.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* Implementation for the mbed library
* https://github.com/mbedmicro/mbed
*
* Copyright (c) 2016 Christopher Haster
* Distributed under the MIT license
*/
#include "equeue_tick.h"
#include "equeue_sema.h"
#include "equeue_mutex.h"

#if defined(EQUEUE_PLATFORM_FREERTOS)

#include "task.h"


// Ticker operations
unsigned equeue_tick(void) {
return xTaskGetTickCountFromISR() * portTICK_PERIOD_MS;
}


// Mutex operations
int equeue_mutex_create(equeue_mutex_t *m) { return 0; }
void equeue_mutex_destroy(equeue_mutex_t *m) { }

void equeue_mutex_lock(equeue_mutex_t *m) {
*m = taskENTER_CRITICAL_FROM_ISR();
}

void equeue_mutex_unlock(equeue_mutex_t *m) {
taskEXIT_CRITICAL_FROM_ISR(*m);
}


// Semaphore operations
int equeue_sema_create(equeue_sema_t *s) {
s->handle = xSemaphoreCreateBinaryStatic(&s->buffer);
return s->handle ? 0 : -1;
}

void equeue_sema_destroy(equeue_sema_t *s) {
vSemaphoreDelete(s->handle);
}

void equeue_sema_signal(equeue_sema_t *s) {
xSemaphoreGiveFromISR(s->handle, NULL);
}

bool equeue_sema_wait(equeue_sema_t *s, int ms) {
if (ms < 0) {
ms = portMAX_DELAY;
} else {
ms = ms / portTICK_PERIOD_MS;
}

return xSemaphoreTake(s->handle, ms);
}


#endif
3 changes: 3 additions & 0 deletions equeue_mutex.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ typedef pthread_mutex_t equeue_mutex_t;
typedef CRITICAL_SECTION equeue_mutex_t;
#elif defined(__MBED__)
typedef unsigned equeue_mutex_t;
#elif defined(EQUEUE_PLATFORM_FREERTOS)
#include "FreeRTOS.h"
typedef UBaseType_t equeue_mutex_t;
#endif


Expand Down
7 changes: 7 additions & 0 deletions equeue_sema.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,13 @@ typedef HANDLE equeue_sema_t;
typedef unsigned equeue_sema_t[8];
#elif defined(__MBED__)
typedef volatile int equeue_sema_t;
#elif defined(EQUEUE_PLATFORM_FREERTOS)
#include "FreeRTOS.h"
#include "semphr.h"
typedef struct equeue_sema {
SemaphoreHandle_t handle;
StaticSemaphore_t buffer;
} equeue_sema_t;
#endif


Expand Down

0 comments on commit 4d63870

Please sign in to comment.