Example
To clarify the project coding guidelines it is sometimes useful to generate Example c Files.
Example for c source file
/**
* @file Example.c
* @brief Example implementation
*
* @copyright Copyright (c) 2021 Tillmann Kaier
*
*/
/* Includes ------------------------------------------------------------------*/
// Module Interface
#include "Example.h"
// Application
// Common Lib
// BSP
// Std Lib
#include <string.h>
/* Private define ------------------------------------------------------------*/
#define SOME_UNSIGNED_DEFINE UINT32_C(10) ///< std cast to unsigned 32bit
#define SOME_SIGNED_DEFINE INT32_C(10) ///< std cast to signed 32bit
/* Private macro -------------------------------------------------------------*/
/* Private typedef -----------------------------------------------------------*/
/**
* @brief enum with local scope
* @details
* The enum name is used to identify the enum members.
*/
typedef enum Constant_e {
CONSTANT_1 = 0, ///< Constant 1
CONSTANT_2, ///< Constant 2
CONSTANT_3, ///< Constant 3
CONSTANT_NUM ///< Number of Constants
} Constant_t;
/**
* @brief struct with local scope
*/
typedef struct InternalData_s {
uint32_t Data; ///< member 1
Example_Ret_t State; ///< member 2
} InternalData_t;
/* Private constants ---------------------------------------------------------*/
/**
* @brief constant with local scope
* @details
* The constant members initialiced directly.
*/
static const InternalData_t InternalConstant = {.Data = SOME_UNSIGNED_DEFINE,
.State = EXAMPLE_RET_OK};
/* Private variables ---------------------------------------------------------*/
/**
* @brief local data
*/
static InternalData_t InternalData;
/* Private function prototypes -----------------------------------------------*/
/**
* @brief local function
*
* @param Para local function parameter
*/
static void doSomething(InternalData_t *const Para);
/**
* @brief Get the State object
*
* @return true everything is ok
*/
static bool getState(void);
/* Interface functions -------------------------------------------------------*/
bool Example_init(Example_Data_t Para1, Example_Ret_t State)
{
InternalData = InternalConstant;
InternalData.Data = Para1.Var;
InternalData.State = State;
doSomething(&InternalData);
}
Example_Ret_t Example_getState(void) { return InternalData.State; }
/* Private functions ---------------------------------------------------------*/
static void doSomething(InternalData_t *const Para) { Para->Data = 0U; }
/* END OF FILE ---------------------------------------------------------------*/
Example for c header file
/**
* @file Example.h
* @brief Example interface
* @details
* This is an example intertface to show how a coding guidline could be used.
*
* @copyright Copyright (c) 2021 Tillmann Kaier
*
*/
#pragma once // prevent recursive inclusion
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Includes ------------------------------------------------------------------*/
#include <stdbool.h>
#include <stdint.h>
/* Public defines ------------------------------------------------------------*/
/* Public constants ----------------------------------------------------------*/
/* Public types --------------------------------------------------------------*/
/**
* @brief public enum example
* @details
* Here all the enum members are written in capital case, the first part of
* the name contains the namespace and the last enum member is used to flag
* the amount of enum members.
*/
typedef enum Example_Ret_e {
EXAMPLE_RET_OK = 0, ///< Success
EXAMPLE_RET_ERR_INTERNAL, ///< Module internal error
EXAMPLE_RET_ERR_NULLPOINTER, ///< NULL pointer error
EXAMPLE_RET_NUM ///< Number of enum elements
} Example_Ret_t;
/**
* @brief public struct example
* @details
* The namespace is used for the first part of the struct type name.
*/
typedef struct Example_Data_s {
uint32_t Var; ///< Struct Member Derscription
} Example_Data_t;
/* Public macro --------------------------------------------------------------*/
/* Public functions ----------------------------------------------------------*/
/**
* @brief public function example
* @details
* The namespace is used for the first part of the function name.
*
* @param Para1 first parameter
* @param State second parameter
* @return true if initialisation was successfull.
*/
bool Example_init(Example_Data_t Para1, Example_Ret_t State);
/**
* @brief read the Example State
* @return State of Example
*/
Example_Ret_t Example_getState(void);
/* Public Variables ----------------------------------------------------------*/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/* END OF FILE ---------------------------------------------------------------*/