working example for Bitfields

master
polymurph 4 years ago
parent 1ff6863dd5
commit 044a39062f

@ -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"
}
}

@ -2,28 +2,31 @@
#include <iostream> #include <iostream>
Device::Device() : Device::Device() :
reg_control(0xFF) reg_control(0x00)
{ {
std::cout << "Device::Device()" << std::endl;
std::cout << +reg_control.raw << std::endl; std::cout << +reg_control.raw << std::endl;
reg_control.bits.POWER_DEV = Reg_Control::POWER_DEV::TURN_OFF; reg_control.bits.POWER_DEV = Reg_Control::POWER_DEV::TURN_OFF;
reg_control.bits.SPEED = Reg_Control::SPEED::STAND_STILL; reg_control.bits.SPEED = Reg_Control::SPEED::STAND_STILL;
std::cout << "Device::Device()" << std::endl;
std::cout << +reg_control.raw << std::endl; std::cout << +reg_control.raw << std::endl;
} }
void Device::doSomething() void Device::doSomething()
{ {
std::cout << "Device::doSomething()" << std::endl; std::cout << "Device::doSomething()" << std::endl;
reg_control.bits.POWER_DEV = Reg_Control::POWER_DEV::TURN_ON; 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){ if(reg_control.bits.POWER_DEV == Reg_Control::POWER_DEV::TURN_ON){
std::cout << "device turned on!" << std::endl; 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;
} }

@ -46,7 +46,7 @@ class Device
{ {
// bit 4 // bit 4
struct POWER_DEV{ struct POWER_DEV{
typedef BitField<uint8_t, 4, 1> Bits; typedef BitField<uint8_t, 7, 1> Bits;
enum{TURN_OFF = 0, TURN_ON = 1}; enum{TURN_OFF = 0, TURN_ON = 1};
}; };
// bits 2-3 // bits 2-3
@ -57,7 +57,7 @@ class Device
NORMAL = 2, NORMAL = 2,
FAST = 3}; FAST = 3};
}; };
struct Bits{ union Bits{
Reg_Control::POWER_DEV::Bits POWER_DEV; Reg_Control::POWER_DEV::Bits POWER_DEV;
Reg_Control::SPEED::Bits SPEED; Reg_Control::SPEED::Bits SPEED;
} bits; } bits;

@ -38,25 +38,10 @@ int main(void)
#endif #endif
class da
{
public:
da();
private:
};
da::da()
{
std::cout << "da::da()" << std::endl;
}
int main(void) int main(void)
{ {
std::cout << "test" << std::endl; std::cout << "test" << std::endl;
da dada;
Device dev; Device dev;
dev.doSomething(); dev.doSomething();

@ -45,7 +45,8 @@ struct BitField
BitField& operator =(T v) BitField& operator =(T v)
{ {
// mask creation for v : https://stackoverflow.com/questions/1392059/algorithm-to-generate-bit-mask // 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; return *this;
} }
@ -56,7 +57,8 @@ struct BitField
*/ */
operator T() const operator T() const
{ {
return _raw >> START; //return _raw >> START;
return (_raw & (((1ULL << SIZE)-1) >> START;
} }
/** /**

Loading…
Cancel
Save