Resolve Rule 5-0-6: cast to 7 bits struct field

Moderators: david ward, misra cpp

Post Reply
pvarela
Posts: 2
Joined: Tue Mar 26, 2013 2:22 pm
Company: Lear

Resolve Rule 5-0-6: cast to 7 bits struct field

Post by pvarela » Tue Aug 12, 2014 4:44 pm

How can resolve next Notes??

Note 1960: Violates MISRA C++ 2008 Required Rule 5-0-6, Implicit conversion of integer to smaller type
Note 1960: Violates MISRA C++ 2008 Required Rule 5-0-3, Implicit conversion of integer cvalue expression


In this assignament:
CTU.EVTCFGR[fTriggerChannel].B.CHANNEL_VALUE = static_cast <uint32>(fAdcChannel & 0xFFU);

Where CHANNEL_VALUE is:
union { /* Event Config 0..63 (Base+0x0030-0x012C) */
vuint32_t R;
struct {
vuint32_t :16;
vuint32_t TM:1;
vuint32_t CLR_FLAG:1;
vuint32_t :5;
vuint32_t ADC_SEL:1;
vuint32_t :1;
vuint32_t CHANNEL_VALUE:7;
} B;
} EVTCFGR[64];


Thanks in advance

misra cpp
Posts: 151
Joined: Mon Jun 02, 2008 1:55 pm
Company: MISRA

Re: Resolve Rule 5-0-6: cast to 7 bits struct field

Post by misra cpp » Mon Oct 31, 2016 3:15 pm

The way bit-fields should be handled is described on page 53 of MISRA C++ 2008

It is possible that the problem is caused by the "& 0xFFU" which gives a value in the range 0..255 (i.e. 8 bit) which is assigned to a 7 bit field

Try using & 0x7FU which gives a value in the range 0..127, i.e. 7 bit. It's also possible that the static_cast to a 32-bit type is the cause of the problem
Posted by and on behalf of
the MISRA C++ Working Group

Post Reply

Return to “6.4 Standard conversions (C++)”