diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..d0fbac9 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,47 @@ +{ + "files.associations": { + "array": "cpp", + "atomic": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "typeinfo": "cpp" + } +} \ No newline at end of file diff --git a/CPP/register_modeling/example_project/driver/device.cpp b/CPP/register_modeling/example_project/driver/device.cpp index aa4ee3b..f160b78 100644 --- a/CPP/register_modeling/example_project/driver/device.cpp +++ b/CPP/register_modeling/example_project/driver/device.cpp @@ -2,28 +2,31 @@ #include Device::Device() : - reg_control(0xFF) + reg_control(0x00) { + + std::cout << "Device::Device()" << std::endl; std::cout << +reg_control.raw << std::endl; reg_control.bits.POWER_DEV = Reg_Control::POWER_DEV::TURN_OFF; reg_control.bits.SPEED = Reg_Control::SPEED::STAND_STILL; - std::cout << "Device::Device()" << std::endl; std::cout << +reg_control.raw << std::endl; } void Device::doSomething() { - std::cout << "Device::doSomething()" << std::endl; reg_control.bits.POWER_DEV = Reg_Control::POWER_DEV::TURN_ON; - reg_control.bits.SPEED = Reg_Control::SPEED::FAST; + reg_control.bits.SPEED = Reg_Control::SPEED::NORMAL; if(reg_control.bits.POWER_DEV == Reg_Control::POWER_DEV::TURN_ON){ std::cout << "device turned on!" << std::endl; } - std::cout << +reg_control.raw << std::endl; + std::cout << "POWER = " << +reg_control.bits.POWER_DEV << std::endl; + std::cout << "SPEED = " <<+reg_control.bits.SPEED << std::endl; + + std::cout << +reg_control.raw << 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 fde105b..08efb7c 100644 --- a/CPP/register_modeling/example_project/driver/device.hpp +++ b/CPP/register_modeling/example_project/driver/device.hpp @@ -46,7 +46,7 @@ class Device { // bit 4 struct POWER_DEV{ - typedef BitField Bits; + typedef BitField Bits; enum{TURN_OFF = 0, TURN_ON = 1}; }; // bits 2-3 @@ -57,7 +57,7 @@ class Device NORMAL = 2, FAST = 3}; }; - struct Bits{ + union Bits{ Reg_Control::POWER_DEV::Bits POWER_DEV; Reg_Control::SPEED::Bits SPEED; } bits; diff --git a/CPP/register_modeling/example_project/main.cpp b/CPP/register_modeling/example_project/main.cpp index 34c3b79..54a3903 100644 --- a/CPP/register_modeling/example_project/main.cpp +++ b/CPP/register_modeling/example_project/main.cpp @@ -38,25 +38,10 @@ int main(void) #endif -class da -{ - public: - da(); - - private: - -}; - -da::da() -{ - std::cout << "da::da()" << std::endl; -} - int main(void) { std::cout << "test" << std::endl; - da dada; Device dev; dev.doSomething(); diff --git a/CPP/register_modeling/example_project/runtest b/CPP/register_modeling/example_project/runtest index bb39298..e21106f 100755 Binary files a/CPP/register_modeling/example_project/runtest and b/CPP/register_modeling/example_project/runtest differ diff --git a/CPP/register_modeling/portable_bitfields/BitField.h b/CPP/register_modeling/portable_bitfields/BitField.h index c3431dd..0d0e588 100644 --- a/CPP/register_modeling/portable_bitfields/BitField.h +++ b/CPP/register_modeling/portable_bitfields/BitField.h @@ -45,7 +45,8 @@ struct BitField BitField& operator =(T v) { // mask creation for v : https://stackoverflow.com/questions/1392059/algorithm-to-generate-bit-mask - _raw = ((v & ((1ULL << SIZE)-1)) << START) ; + //_raw = ((v & ((1ULL << SIZE)-1)) << START) ; + _raw = ((v & ((1ULL << SIZE)-1)) << START) | (_raw & ~(((1ULL << SIZE)-1) << START)); return *this; } @@ -56,7 +57,8 @@ struct BitField */ operator T() const { - return _raw >> START; + //return _raw >> START; + return (_raw & (((1ULL << SIZE)-1) >> START; } /**