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>
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;
}

@ -46,7 +46,7 @@ class Device
{
// bit 4
struct POWER_DEV{
typedef BitField<uint8_t, 4, 1> Bits;
typedef BitField<uint8_t, 7, 1> 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;

@ -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();

@ -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;
}
/**

Loading…
Cancel
Save