From 044a39062f6d2eda33db73f38669cb0f8f36f269 Mon Sep 17 00:00:00 2001 From: polymurph Date: Sun, 11 Jul 2021 10:02:33 +0200 Subject: [PATCH] working example for Bitfields --- .vscode/settings.json | 47 ++++++++++++++++++ .../example_project/driver/device.cpp | 13 +++-- .../example_project/driver/device.hpp | 4 +- .../example_project/main.cpp | 15 ------ CPP/register_modeling/example_project/runtest | Bin 17912 -> 17896 bytes .../portable_bitfields/BitField.h | 6 ++- 6 files changed, 61 insertions(+), 24 deletions(-) create mode 100644 .vscode/settings.json 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 bb39298fbb4083811b19327dc791c99d5220e86e..e21106fff543b54d81d3a359498ce1287b389211 100755 GIT binary patch delta 2596 zcma)8ZA?>F7(Ta9p$N1^SPMwjc0@o005~3(WYIDt;2QM;rd1Snvrf9hJK|1b@zocY%V$lVm2*ugsgEYa$jnSqE&pQNx{n3}cWpho$}Vr7vw0kKt*5XJnf^ zuJ0oHu5Og#&bbe(GUj(KoOC`foG*SX`Dru6r`h?yW<)Ac=1GV}Ux93r?ix{ht#Io5fSCmrDAM z?)}|OiO|0l%Jm7;zx~2Dl&VSnpBd@4_j>()g+cLfzh0JvNqz}Q@4Q@hm43fQoO4p- zuvetjE7HM4KAtYJd#Xr_U*y&T)&d{UT1Fz}lxePJLL2+`9E{y!B>%WxMz=dtRd&#bY| zJ6PG!N*{1C`XZ0EfO>)ZGVCQN)o+(u0s;ype+CO|b!c-XT>L(oJik2`_QS9jO|us; zJH2kzYAazsPmkMTwQL~YvDKn#DXNV@LsRjFr?pr2p9R zwF@!8W>4N*g(1cr>}}!-i|}GIJ)QiKH0Uv=Tn~^2=}20tR7Q>ICTSGUD9^I=Yf@65 zh~d>B>^W`?3HNL8D!}P!+M+k55L&V*)tV9M)%V53pc)p_Echromj0$L6Rboc$OrW5 zqJ*@S*s3HF>P3EDk{e-V#-H_LX1!j!f$4TMo$KPLl*oV;h#IBl4DFWdKYS_-L(XYIPJ>c0iI>j{jw}mW6=oq^DLDaBA^j^+;!yg@H4IF_LXLn9Ic`5t` zgda-eR~Tmcx>+aDeVHc7LC@m3kv|(4;~CBjkpj0@)z;HTOO6&6t*dBks;;fC*x9(X znpC{Ec6DZcZPUuyt##E!HEU|pWp>M3cGbwcnDuqWs#3Xz{*e_&_1T}yohgt3fixjN zo!N1;RBNYqvOCPvl!O;k^3*Loqt)bTX-s~K&Ua1*X-R&ew1FPaPu2Opr!smYKf^d` j@lL^qJ3P@VmTU0UZ;~@~S2DfEqx86(A$>@1$O-=f#F+M; delta 2503 zcmZ`*e@s(X6uz&ttaM0Qpgs|mR#ZR-T{|iaDVD<1k|7qITV%4*2uO`1ZZP~Y7BrZJ zhIOgCWG2QXuwR*3Ou%MlF~)(+G5trE>_?Wl4VNvc$>Lz*f|>gE-S=KgVeTgHefOU8 zopZi>?tRc`KR4UYh4Zh@4Kom!dzZCd3n3^pph7dvwI`MNfE# zC-}Rk_YZ?7`1-6Tp3KlZWTXt6@xR zq}>1CQl%nGSlFHWG0BJK!frETe-AW6m8AI}hS-FpncWt)k<{2mFkgdtIj0{OJvQ2z zkByv=YkZ2N(Qv%R;<+0AQjK{%>|WZzLqQ3&pMUTg$mtix1!#^?4e<|)Sho3cN zb)vs%PTel}m;Jwg59tPBB?x?Cf^BmNPQmZQDbytTRn>6;7vOJ&-<0V0%JH}?tGn=+Ev{{opw$OU}+D)KlXhL}Z0AGJ96tTyBzB!dh)=X(#)dIxWN zQ>uVIyXJd!u%|;$m(maEqJi=rJ&LH)@UDcnT~R9?G`w9Fd)^Dn#Huir z%g-wHCY9baDsnEx7~BukQp(%zDm<6cE69*XG(9ca_gxWG`}%m;8ZtdabO3 zHf_jOGXb<#Q%;9B3`CmBKh~&5)Kup#N{L;BYFg>u%x$4TH-2oH<&Apjn7hOnRaP-< di=!R 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; } /**