commit
8f8f2050cf
@ -0,0 +1,99 @@
|
||||
# Coding Guide
|
||||
|
||||
## ToDo's and Discussion
|
||||
* Rieter data type (ru8, ru16, ru32, ri8, ri16, ri32, rbool, ...)
|
||||
* Use Googles StyleGuide https://google.github.io/styleguide/cppguide.html?
|
||||
|
||||
## Generell
|
||||
* Indentation `Instead of Tabulator use 4 Spaces`
|
||||
* Variables `Names are in CamelCase`
|
||||
* Queues `Only used in ther own modul`
|
||||
* Global variables / extern declaration `Avoid them - use getter/setter-functions` `(If it is really needed use include of its header instead of another extern declaration)`
|
||||
* Follow the rule `Code is like humor - if you have to explain it, it's bad`
|
||||
|
||||
## Module
|
||||
* Name is a combination of its software layer which its from and the feature of it (TBD prefix "r")
|
||||
* Initialization-function is needed by every modul (empty or not) called modulnameInit
|
||||
* Every modul (c/cpp) has own (or more) h/hpp files with the same filename (more files use postfix)
|
||||
|
||||
Standard: LayerFeature.c and LayerFeature.h
|
||||
|
||||
Optional: LayerFeatureUsecase.h
|
||||
|
||||
## Functions
|
||||
* Functions with return only has one return in the last row
|
||||
|
||||
## Includes
|
||||
|
||||
## Defines / Macros
|
||||
* Start with prefix D_
|
||||
* Only use UPPERCASE
|
||||
* Use brackets for the value
|
||||
* Global defines also have the modulname where they come from
|
||||
* Macros use M_ as prefix instead of D_
|
||||
* Avoid magic numbers in code and use defines instead
|
||||
|
||||
```
|
||||
#define D_<MODULNAME_>FEATURE_NAME (value) //comment
|
||||
#define D_STACKSIZE_DEBUG (0x200) //bytes
|
||||
#define D_YARNHANDLE_TIMER_XYZ (12) //ms
|
||||
```
|
||||
|
||||
## Enumerations
|
||||
* Enumtype start with prefix te followed by Modul which it comes from and the Name d
|
||||
* Enumerations start with e followed by Modul, Name (of enum) and _NAME (uppercase for constant name)
|
||||
* Set the first enumeration to zero, if possible
|
||||
|
||||
```
|
||||
typedef enum{
|
||||
eModulName_INIT = 0,
|
||||
eModulName_START,
|
||||
eModulName_END,
|
||||
|
||||
eModulName_NUM
|
||||
}teModulName;
|
||||
```
|
||||
|
||||
## Structs
|
||||
* Name start with prefix ts followed by Modul which it comes from and the Name
|
||||
|
||||
```
|
||||
typedef struct{
|
||||
uint8_t sFeatureName1;
|
||||
int32_t sFeatureName2
|
||||
}tsModulName;
|
||||
|
||||
tsModulName sName = {
|
||||
.sFeatureName1 = 0;
|
||||
.sFeatureName2 = -12;
|
||||
};
|
||||
```
|
||||
|
||||
## If / Switch case
|
||||
* Curly brackets for every if/else/elseif-case
|
||||
* Constants on the left side at if/elseif to avoid "=" instead of "==" bugs
|
||||
* Always use default-case in switch
|
||||
|
||||
```
|
||||
if(0x1337 == variable){
|
||||
//code
|
||||
} else {
|
||||
//code
|
||||
}
|
||||
|
||||
if(0x1337 == variable){
|
||||
//code
|
||||
}
|
||||
else{
|
||||
; //code
|
||||
}
|
||||
|
||||
switch(variable){
|
||||
case 0:
|
||||
//code
|
||||
break;
|
||||
default:
|
||||
//code or not
|
||||
break;
|
||||
}
|
||||
```
|
||||
Loading…
Reference in new issue