From 5c7200fa0a48ad63c735e8a80105ad8683f5d702 Mon Sep 17 00:00:00 2001 From: polymurph Date: Sun, 11 Jul 2021 11:20:37 +0200 Subject: [PATCH] added example with const bitfield --- .../example_project/driver/device.cpp | 17 +++++++++ .../example_project/driver/device.hpp | 33 ++++++++++++++++++ .../example_project/main.cpp | 4 ++- CPP/register_modeling/example_project/runtest | Bin 18056 -> 18320 bytes 4 files changed, 53 insertions(+), 1 deletion(-) diff --git a/CPP/register_modeling/example_project/driver/device.cpp b/CPP/register_modeling/example_project/driver/device.cpp index 06f4851..e9ebe90 100644 --- a/CPP/register_modeling/example_project/driver/device.cpp +++ b/CPP/register_modeling/example_project/driver/device.cpp @@ -47,4 +47,21 @@ void Device::doSomething() +} + +void Device::status() +{ + // imitating read hardware register + reg_motorStatus = 0xFF; + + if(reg_motorStatus.bits.POWER == Reg_MotorStatus::POWER::ON) { + std::cout << "Motor is Powered ON!" << std::endl; + } else { + std::cout << "Motor is Powered OFF!" << std::endl; + } + + // will throw error because this bitfield is set const! + //std::cout << "Motor is Powered ON!" << std::endl; + + std::cout << +reg_motorStatus.bits.POWER << std::endl; } \ No newline at end of file diff --git a/CPP/register_modeling/example_project/driver/device.hpp b/CPP/register_modeling/example_project/driver/device.hpp index 32f4689..2f9e1ea 100644 --- a/CPP/register_modeling/example_project/driver/device.hpp +++ b/CPP/register_modeling/example_project/driver/device.hpp @@ -13,6 +13,8 @@ class Device void doSomething(); + void status(); + private: // @@ -71,8 +73,39 @@ class Device void operator = (uint8_t v) {raw = v;} }; + union Reg_MotorStatus + { + struct POWER{ + typedef BitField Bits; + enum{OFF = 0, ON = 1}; + }; + struct STATUS{ + typedef BitFieldBits; + enum{STANDSTILL = 0, + ACCELERATING_CW = 1, + DEACCELERATING_CW = 2, + ACCELERATING_CCW = 3, + DEACCELERATING_CCW = 4, + CONSTANT_SPEED = 5, + BLOCKED = 6}; + }; + union Bits + { + // is set const because it only used for status indication + const Reg_MotorStatus::POWER::Bits POWER; + const Reg_MotorStatus::STATUS::Bits STATUS; + }bits; + uint8_t raw; + + Reg_MotorStatus(uint8_t v = 0x00) : raw(v) {} + operator uint8_t() {return raw;} + void operator = (uint8_t v) {raw = v;} + }; + Reg_Control reg_control; + Reg_MotorStatus reg_motorStatus; + }; diff --git a/CPP/register_modeling/example_project/main.cpp b/CPP/register_modeling/example_project/main.cpp index ab862ce..ea510f1 100644 --- a/CPP/register_modeling/example_project/main.cpp +++ b/CPP/register_modeling/example_project/main.cpp @@ -47,7 +47,9 @@ int main(void) Device dev; - dev.doSomething(); + //dev.doSomething(); + + dev.status(); //dev.doSomething(); diff --git a/CPP/register_modeling/example_project/runtest b/CPP/register_modeling/example_project/runtest index 869ff84632fb756479470e0c610efce0e58d546f..107aae98c5284fe67d19262079327c9bc2dc8e36 100755 GIT binary patch delta 2994 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 azuNAaW0?PpgQ|zClg2~FH4(mTDEJRbwf6P^