Skip to content

Commit

Permalink
Propose for srtm freertos static api usage (#13)
Browse files Browse the repository at this point in the history
* Propose for srtm freertos static api usage

Signed-off-by: Dusan Cervenka <Cervenka.dusan@gmail.com>

* Mutext buf type srtm_mutex_buf_t

Signed-off-by: Dusan Cervenka <Cervenka.dusan@gmail.com>

* Fix tab for endif macro

Signed-off-by: Dusan Cervenka <Cervenka.dusan@gmail.com>

* Rename semaphore static buf type to srtm_sem_buf_t

Signed-off-by: Dusan Cervenka <Cervenka.dusan@gmail.com>

* Improve usage of static api calls.

Signed-off-by: Dusan Cervenka <Cervenka.dusan@gmail.com>

* Fixed scope for static semaphore.

Signed-off-by: Dusan Cervenka <Cervenka.dusan@gmail.com>
  • Loading branch information
Hadatko committed Mar 30, 2021
1 parent 3fb684a commit 102c27d
Show file tree
Hide file tree
Showing 10 changed files with 94 additions and 2 deletions.
10 changes: 8 additions & 2 deletions components/srtm/include/srtm_defs.h
Expand Up @@ -9,9 +9,10 @@
#ifndef __SRTM_DEFS_H__
#define __SRTM_DEFS_H__

#include <stdint.h>
#include <stdbool.h>
#include "srtm_config.h"
#include <assert.h>
#include <stdbool.h>
#include <stdint.h>

/*!
* @addtogroup srtm
Expand All @@ -31,6 +32,11 @@
/*! @brief SRTM version definition */
#define SRTM_MAKE_VERSION(major, minor, bugfix) ((((uint32_t)major) << 16) | (((uint32_t)minor) << 8) | (bugfix))

/*! Define static api calls as disabled, if no other option is present. */
#ifndef SRTM_STATIC_API
#define SRTM_STATIC_API 0
#endif

/* IAR ARM build tools */
#if defined(__ICCARM__)

Expand Down
20 changes: 20 additions & 0 deletions components/srtm/port/srtm_config.h
@@ -0,0 +1,20 @@
/*
* Copyright 2021, NXP
* All rights reserved.
*
*
* SPDX-License-Identifier: BSD-3-Clause
*/

#ifndef _SRTM_CONFIG_H
#define _SRTM_CONFIG_H

#include "FreeRTOS.h"

#if configSUPPORT_STATIC_ALLOCATION
#define SRTM_STATIC_API 1
typedef StaticSemaphore_t srtm_sem_buf_t;
typedef StaticSemaphore_t srtm_mutex_buf_t;
#endif

#endif
7 changes: 7 additions & 0 deletions components/srtm/port/srtm_mutex_freertos.c
Expand Up @@ -26,10 +26,17 @@
/*******************************************************************************
* Code
******************************************************************************/
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_mutex_t SRTM_Mutex_Create(srtm_mutex_buf_t *stack)
{
return xSemaphoreCreateMutexStatic(stack);
}
#else
srtm_mutex_t SRTM_Mutex_Create(void)
{
return xSemaphoreCreateMutex();
}
#endif

void SRTM_Mutex_Destroy(srtm_mutex_t mutex)
{
Expand Down
7 changes: 7 additions & 0 deletions components/srtm/port/srtm_sem_freertos.c
Expand Up @@ -27,10 +27,17 @@
/*******************************************************************************
* Code
******************************************************************************/
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_sem_t SRTM_Sem_Create(uint32_t maxCount, uint32_t initCount, srtm_sem_buf_t *stack)
{
return xSemaphoreCreateCountingStatic(maxCount, initCount, stack);
}
#else
srtm_sem_t SRTM_Sem_Create(uint32_t maxCount, uint32_t initCount)
{
return xSemaphoreCreateCounting(maxCount, initCount);
}
#endif

void SRTM_Sem_Destroy(srtm_sem_t sem)
{
Expand Down
22 changes: 22 additions & 0 deletions components/srtm/srtm/srtm_dispatcher.c
Expand Up @@ -200,11 +200,19 @@ static void SRTM_Dispatcher_RecycleMessage(srtm_message_t msg, void *param)
srtm_dispatcher_t SRTM_Dispatcher_Create(void)
{
srtm_dispatcher_t disp = (srtm_dispatcher_t)SRTM_Heap_Malloc(sizeof(struct _srtm_dispatcher));
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_mutex_t mutex = SRTM_Mutex_Create(&disp->mutexStatic);
srtm_sem_t startSig = SRTM_Sem_Create(1U, 0U, &disp->startSigStatic);
srtm_sem_t stopSig = SRTM_Sem_Create(1U, 0U, &disp->stopSigStatic);
/* Assume same maximum message number of local and remote in messageQ */
srtm_sem_t queueSig = SRTM_Sem_Create(SRTM_DISPATCHER_CONFIG_RX_MSG_NUMBER * 2, 0U, &disp->queueSigStatic);
#else
srtm_mutex_t mutex = SRTM_Mutex_Create();
srtm_sem_t startSig = SRTM_Sem_Create(1U, 0U);
srtm_sem_t stopSig = SRTM_Sem_Create(1U, 0U);
/* Assume same maximum message number of local and remote in messageQ */
srtm_sem_t queueSig = SRTM_Sem_Create(SRTM_DISPATCHER_CONFIG_RX_MSG_NUMBER * 2U, 0U);
#endif
srtm_message_t msg;
uint32_t i;

Expand Down Expand Up @@ -519,13 +527,20 @@ srtm_status_t SRTM_Dispatcher_Request(srtm_dispatcher_t disp,
srtm_sem_t signal;
srtm_status_t status;
srtm_response_t resp;
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_sem_buf_t signalStatic;
#endif

assert(disp);
assert(req);

SRTM_DEBUG_MESSAGE(SRTM_DEBUG_VERBOSE_DEBUG, "%s\r\n", __func__);

#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
signal = SRTM_Sem_Create(1U, 0U, &signalStatic);
#else
signal = SRTM_Sem_Create(1U, 0U);
#endif
if (signal == NULL)
{
return SRTM_Status_OutOfMemory;
Expand Down Expand Up @@ -649,14 +664,21 @@ srtm_status_t SRTM_Dispatcher_DeliverMessages(srtm_dispatcher_t disp, srtm_list_
srtm_status_t SRTM_Dispatcher_CallProc(srtm_dispatcher_t disp, srtm_procedure_t proc, uint32_t timeout)
{
srtm_sem_t signal;
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_sem_buf_t signalStatic;
#endif
srtm_status_t status;

assert(disp);
assert(proc);

SRTM_DEBUG_MESSAGE(SRTM_DEBUG_VERBOSE_DEBUG, "%s\r\n", __func__);

#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
signal = SRTM_Sem_Create(1U, 0U, &signalStatic);
#else
signal = SRTM_Sem_Create(1U, 0U);
#endif
if (signal == NULL)
{
return SRTM_Status_OutOfMemory;
Expand Down
12 changes: 12 additions & 0 deletions components/srtm/srtm/srtm_dispatcher_struct.h
Expand Up @@ -49,6 +49,9 @@ struct _srtm_dispatcher
srtm_list_t services; /*!< SRTM service list head */

srtm_mutex_t mutex; /*!< Mutex for multi-task protection */
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_mutex_buf_t mutexStatic;
#endif

srtm_list_t freeRxMsgs; /*!< Free Rx messages list to hold the callback Rx data */
srtm_list_t messageQ; /*!< Message queue to hold the messages to process */
Expand All @@ -57,8 +60,17 @@ struct _srtm_dispatcher
volatile bool stopReq; /*!< SRTM dispatcher stop request flag */
bool started; /*!< SRTM dispatcher started flag */
srtm_sem_t startSig; /*!< SRTM dispatcher start signal */
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_sem_buf_t startSigStatic;
#endif
srtm_sem_t stopSig; /*!< SRTM dispatcher stop signal */
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_sem_buf_t stopSigStatic;
#endif
srtm_sem_t queueSig; /*!< SRTM dispatcher messageQ signal */
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_sem_buf_t queueSigStatic;
#endif
};

/*******************************************************************************
Expand Down
6 changes: 6 additions & 0 deletions components/srtm/srtm/srtm_mutex.h
Expand Up @@ -34,9 +34,15 @@ extern "C" {
/*!
* @brief Create a mutex.
*
* @param stack Stack for mutex data.
*
* @return Created mutex handle, or NULL on failure.
*/
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_mutex_t SRTM_Mutex_Create(srtm_mutex_buf_t *stack);
#else
srtm_mutex_t SRTM_Mutex_Create(void);
#endif

/*!
* @brief Destroy the mutex.
Expand Down
4 changes: 4 additions & 0 deletions components/srtm/srtm/srtm_peercore.c
Expand Up @@ -34,7 +34,11 @@
srtm_peercore_t SRTM_PeerCore_Create(uint32_t id)
{
srtm_peercore_t core = (srtm_peercore_t)SRTM_Heap_Malloc(sizeof(struct _srtm_peercore));
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_mutex_t mutex = SRTM_Mutex_Create(&core->mutexStatic);
#else
srtm_mutex_t mutex = SRTM_Mutex_Create();
#endif

assert((core != NULL) && (mutex != NULL));

Expand Down
3 changes: 3 additions & 0 deletions components/srtm/srtm/srtm_peercore_struct.h
Expand Up @@ -28,6 +28,9 @@ struct _srtm_peercore

srtm_dispatcher_t dispatcher;
srtm_mutex_t mutex;
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_mutex_buf_t mutexStatic;
#endif

bool started;
srtm_peercore_state_t state;
Expand Down
5 changes: 5 additions & 0 deletions components/srtm/srtm/srtm_sem.h
Expand Up @@ -36,9 +36,14 @@ extern "C" {
*
* @param maxCount maximum count value of the semaphore.
* @param initCount initial count value of the semaphore.
* @param stack Stack for semaphore data.
* @return Created semaphore handle, or NULL on failure.
*/
#if defined(SRTM_STATIC_API) && SRTM_STATIC_API
srtm_sem_t SRTM_Sem_Create(uint32_t maxCount, uint32_t initCount, srtm_sem_buf_t *stack);
#else
srtm_sem_t SRTM_Sem_Create(uint32_t maxCount, uint32_t initCount);
#endif

/*!
* @brief Destroy the semaphore.
Expand Down

0 comments on commit 102c27d

Please sign in to comment.