c++ - Raspberry Pi 4 GPPUDCLK0,C++ 赋值运算符静默失败?
问题描述
背景: 我正在尝试编辑 Raspberry Pi 4 的 GPPUDCLK0 寄存器,我可以从寄存器中读取,但是当我尝试将 (1<<21) 分配给它时,分配返回 0 而随后的读数显示寄存器保持不变不变。
问题: c++ 赋值运算符是否有可能静默失败?
资源
int fdgpio = this->open_gpio_file();
if (fdgpio >= 0)
{
unsigned int *gpio=(unsigned int *)mmap( 0, 4096, PROT_READ+PROT_WRITE, MAP_SHARED, fdgpio, 0);
//write the updated register value to the register
//gpio[GPIO_Control::PI_4_GPPUD_INT_OFFSET] = command;
std::cout << "equal be: " << std::bitset<32>(gpio[GPIO_Control::PI_4_GPPUD_INT_OFFSET] = command) << std::endl;
std::cout << "Commands: " << std::bitset<32>(gpio[GPIO_Control::PI_4_GPPUD_INT_OFFSET]) << std::endl;
int wait_count = 0;//count through count_limit cycles
while(wait_count < wait_limit)
{
wait_count += 1;
}
unsigned short bit_offset;
unsigned short clock_offset;
if(32 > gpio_number)
{
bit_offset = gpio_number;
clock_offset = GPIO_Control::PI_4_GPPUDCLK0_INT_OFFSET;
}
else
{
bit_offset = gpio_number - 32;
clock_offset = GPIO_Control::PI_4_GPPUDCLK1_INT_OFFSET;
}
std::cout << "Clk Offset: " << clock_offset << std::endl;
//activate the clock
uint32_t temp = (1<<bit_offset);
std::cout << "equal be: " << std::bitset<32>(gpio[clock_offset] = temp) << std::endl;
std::cout << "Should be: " << std::bitset<32>(temp) << std::endl;
std::cout << "Clk 0: " << std::bitset<32>(gpio[GPIO_Control::PI_4_GPPUDCLK0_INT_OFFSET]) << std::endl;
std::cout << "Clk 1: " << std::bitset<32>(gpio[GPIO_Control::PI_4_GPPUDCLK1_INT_OFFSET]) << std::endl;
wait_count = 0;//count through count_limit cycles
while(wait_count < wait_limit)
{
wait_count += 1;
}
//clear both registers
gpio[GPIO_Control::PI_4_GPPUD_INT_OFFSET] = 0;
gpio[clock_offset] = 0;
std::cout << "Commands: " << std::bitset<32>(gpio[GPIO_Control::PI_4_GPPUD_INT_OFFSET]) << std::endl;
std::cout << "Clk 0: " << std::bitset<32>(gpio[GPIO_Control::PI_4_GPPUDCLK0_INT_OFFSET]) << std::endl;
std::cout << "Clk 1: " << std::bitset<32>(gpio[GPIO_Control::PI_4_GPPUDCLK1_INT_OFFSET]) << std::endl;
}
来自对命令 01 和 10 的两个单独调用的输出
equal be: 00000000000000000000000000000010
Commands: 00000000000000000000000000000010
Clk Offset: 24
equal be: 00000000000000000000000000000000
Should be: 00000000001000000000000000000000
Clk 0: 00000000000000000000000000000000
Clk 1: 00000000000000000000000000000000
Commands: 00000000000000000000000000000000
Clk 0: 00000000000000000000000000000000
Clk 1: 00000000000000000000000000000000
equal be: 00000000000000000000000000000001
Commands: 00000000000000000000000000000001
Clk Offset: 24
equal be: 00000000000000000000000000000000
Should be: 00000000001000000000000000000000
Clk 0: 00000000000000000000000000000000
Clk 1: 00000000000000000000000000000000
Commands: 00000000000000000000000000000000
Clk 0: 00000000000000000000000000000000
Clk 1: 00000000000000000000000000000000
解决方案
推荐阅读
- latency - aerospike 与 aws 的不良延迟
- javascript - javascript中的元素分组
- android - Android Google 文字转语音语言支持
- javascript - 如何从选定的输入字段中获取值(不使用 id)
- android - 前台服务不起作用 i LG K10 2017 android 7.0 设备
- javascript - Reactjs:如何在客户端将图像最小化为特定的纵横比?
- swift - 没有调试模式 UnsafePointer withMemoryRebound 将给出错误值
- php - 发送有关订单状态从自定义更改为处理的处理电子邮件通知
- openshift - 如何将请求映射到 Openshift v3 中 pod 中的多个端口?
- python - 在while循环执行期间线程停止