我正在设置RamBlock“模拟”。使用十六进制(10个元素)的布尔静态数组,这些数组需要逐位单独修改。
uint8_t boolArray[10] = {0x03, 0xED, 0xE8, 0x00, 0xFF, 0x56, 0x01, 0x02, 0xAB, 0x18};
编辑:在需求字段中,提供了一个原型功能:
Std_ReturnType _WriteBoolean(uint8_t ramBlockAddr, uint16_t ramBlockLength, uint16_t byteIndex, uint8_t bitIndex, const uint8_t* value, uint8_t length)
并且我可以使用以下参数修改以下内容:byteIndex,bitIndex,长度和值。
函数如下:
returnValue = _WriteBoolean((uint8_t*)&boolArray[0], 10, 0, 3, (uint8_t*) &x, 4);
/*Bits should be written with the value provided by "x"*/
我可以通过&boolArray[i]
访问boolArray []的元素。不知道如何使用从函数(returnValue)获取的新布尔值修改/更新它。
任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
要打开或关闭某些位,可以使用按位操作。例如,如果我们有一个值为0x3
(二进制为0011)来打开第三位,则可以执行value |= (1 << 2)
。我们将临时常量1
的内容向前移动两个位置,然后执行OR
,其值是:0011 | 0100 = 0111。
要稍微关闭一点,我们做同样的事情,只是我们使用常量的补码,然后使用值AND
=> value &= ~(1 << 2)
和0111
~0100
=> 0111
&1011
=> 0011
联合也可以用来表示内存块:
typedef union {
uint_8 data;
struct {
uint8_t cell1;
uint8_t cell2;
uint8_t cell3;
uint8_t cell4;
uint8_t cell5;
uint8_t cell6;
uint8_t cell7;
uint8_t cell8;
};
} Block_t