Skip to content

Add embedded #12

Open
patrickelectric wants to merge 2 commits intobluerobotics:masterfrom
patrickelectric:embedded
Open

Add embedded #12
patrickelectric wants to merge 2 commits intobluerobotics:masterfrom
patrickelectric:embedded

Conversation

@patrickelectric
Copy link
Member

No description provided.

Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>

- Follow the project code style and keep it consistent within each file.
- Prefer small, focused functions over long procedural blocks.
- Prefer compile-time checksm add run-time checks for safety-critical paths.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Prefer compile-time checksm add run-time checks for safety-critical paths.
- Prefer compile-time checks, and add run-time checks only for safety-critical paths.

## Preprocessor rules

- Only use `#pragma once` and `#include`
- Do not use `#define` for inline macros or constants, use `inline`, `const`, `constexpr`, or `consteval` instead.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This assumes that C++ only code is being used, do we want to broad this for maybe Rust/C?

- No spaces around `.` or `->`, and no spaces around unary operators.
- Naming rules follow the project standard. If none is defined, use:
- `lower_snake_case` for functions and variables
- `UpperCamel_Case` for classes, structs, enums, and typedefs (e.g., `AP_Compass`)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not a valid UpperCamelCase (PascalCase); it is a mixture of naming conventions.
Unless dictated by a specific project style, we should avoid this and try to maintain a single, consistent naming convention.
Mixing conventions or having different rules tends to reduce readability and maintainability, as seen in APIs such as OpenGL.

- `UpperCamel_Case` for classes, structs, enums, and typedefs (e.g., `AP_Compass`)
- lowercase constants and enumerators
- uppercase acronyms inside identifiers (e.g., `GCS_MAVLink`)
- use underscore for private properties

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is against AV Rule 47

Image

## Class design

- Use `struct` for plain data, `class` for invariants and encapsulation.
- Keep data members private, avoid public/protected data in classes.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Most of C++ references tends to use member variables/functions to address properties and methods.

Suggested change
- Keep data members private, avoid public/protected data in classes.
- Keep **member variables** private; avoid use of public or protected **member variables** in C++ classes.

## Header and implementation structure

- `.h` for headers, `.cpp` for implementations.
- Headers contain declarations only, no non-const data or function definitions.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Headers contain declarations only, no non-const data or function definitions.
- Headers should contain declarations only; by default, they must not contain non-const data or function definitions, except for:
- inline functions
- templates
- `constexpr` or `consteval` definitions


- `.h` for headers, `.cpp` for implementations.
- Headers contain declarations only, no non-const data or function definitions.
- Exceptions: inline functions and templates.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Exceptions: inline functions and templates.

Join this with suggestion above

unless the platform and toolchain explicitly support it and memory costs are measured.
- Prefer fixed-size arrays, if dynamic containers are needed, use project-approved
alternatives.
- Avoid bit fields, use plain booleans.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Accordingly to JSF AV Rules [154, 155, 156]

Suggested change
- Avoid bit fields, use plain booleans.
- Avoid using bit-fields for data packing or space optimization.
- For general state and control logic, prefer plain boolean or integer members over bit-fields.
- Bit-fields may be used only when required for hardware register mapping or protocol conformance, and shall use explicitly unsigned integral or enumeration types.
- Do not rely on implementation-defined bit-field behavior.


## Style and naming

- Avoid tabs, indent consistently (use 2 or four spaces, be consistent with the project).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Avoid tabs, indent consistently (use 2 or four spaces, be consistent with the project).
- Avoid tabs; use spaces for indentation. The exact width (2 or 4 spaces) must follow the project standard and remain consistent within a file.

- Do not call virtual functions from constructors or destructors.
- Use member initializer lists for non-static members.
- Declare copy/assignment when owning pointers or nontrivial destructors.
- Base classes with virtual functions must have virtual destructors.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Base classes with virtual functions must have virtual destructors.
- Base classes with virtual functions must have virtual destructors, unless the class is
explicitly marked as `final`.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants