解释代码void I2C_reg_handle(uint8_t reg, uint8_t data) { if (reg < REG_LED0 || reg >= REG_NO_MAX) return; system_st.i2c_registers[reg] = data; if (reg == REG_WDI) system_st.emStateTmp = data; if (reg == REG_LED) { if (data) GPIO_WriteHigh(GPIOD, GPIO_PIN_4); else GPIO_WriteLow(GPIOD, GPIO_PIN_4); } if (reg == REG_SLEEP_START) { system_st.sleep_time_start[system_st.sleep_time_idx++] = data; if (system_st.sleep_time_idx >= 5) { system_st.sleep_time_idx = 0; system_st.sleep_time_start_cnt = system_st.sleep_time_start[0]*16*16*16*16 + system_st.sleep_time_start[1]*16*16*16 + system_st.sleep_time_start[2]*16*16 + system_st.sleep_time_start[3]*16 + system_st.sleep_time_start[4]; system_st.sleep_time_start_cnt *= 500; /* convert to jiffies counter */ main_st.sleep_time_start_jiffies = main_st.sys_jiffies; } } else if (reg == REG_SLEEP_STOP) { system_st.sleep_time_stop[system_st.sleep_time_idx++] = data; if (system_st.sleep_time_idx >= 5) { system_st.sleep_time_idx = 0; system_st.sleep_time_stop_cnt = system_st.sleep_time_stop[0]*16*16*16*16 + system_st.sleep_time_stop[1]*16*16*16 + system_st.sleep_time_stop[2]*16*16 + system_st.sleep_time_stop[3]*16 + system_st.sleep_time_stop[4]; system_st.sleep_time_stop_cnt *= 500; /* convert to jiffies counter */ main_st.sleep_time_stop_jiffies = main_st.sys_jiffies; } } }
时间: 2024-01-18 09:04:10 浏览: 108
duojikongzhi.rar_Unsigned_c++include <reg51>
这段代码是一个函数定义,函数名为 `I2C_reg_handle` ,接受两个参数 `reg` 和 `data` ,都是 uint8_t 类型。函数的作用是处理 I2C 寄存器的值。
首先,代码通过判断 `reg` 的取值范围,如果不在 `REG_LED0` 和 `REG_NO_MAX` 之间,则直接返回,不做任何处理。
然后,代码将 `data` 的值赋给 `system_st.i2c_registers[reg]` ,即将 I2C 寄存器的值更新为 `data` 。
接下来,代码根据不同的 `reg` 值做了一些特定的处理:
- 如果 `reg` 的值等于 `REG_WDI` ,则将 `data` 的值赋给 `system_st.emStateTmp` 。
- 如果 `reg` 的值等于 `REG_LED` ,则根据 `data` 的值来控制一个 LED 的状态。如果 `data` 为真,则将 GPIOD 的第 4 个引脚置高,否则将其置低。
- 如果 `reg` 的值等于 `REG_SLEEP_START` ,则将 `data` 的值存入 `system_st.sleep_time_start` 数组,并根据数组中的值计算出睡眠时间的计数器,并记录下当前的时间戳。
- 如果 `reg` 的值等于 `REG_SLEEP_STOP` ,则将 `data` 的值存入 `system_st.sleep_time_stop` 数组,并根据数组中的值计算出睡眠结束时间的计数器,并记录下当前的时间戳。
这段代码的作用是根据传入的寄存器和数据值,更新相应的状态和执行相应的操作。
阅读全文