基本功能学习
一.enum枚举使用
E_SENSOR_REQ_NONE 的定义及用途
在传感器驱动开发或者电源管理模块中,E_SENSOR_REQ_NONE
通常被用来表示一种特殊的状态或请求模式。这种状态可能用于指示当前没有活动的传感器请求,或者是默认初始化状态下的一种占位符。
可能的定义场景
如果参考常见的传感器框架设计逻辑,E_SENSOR_REQ_NONE
可能是枚举类型中的一个成员,类似于以下代码结构:
typedef enum {E_SENSOR_REQ_NONE, // 表示无任何传感器请求E_SENSOR_REQ_ACTIVE, // 请求激活某个特定的传感器E_SENSOR_REQ_SUSPEND, // 请求挂起某个正在运行的传感器E_SENSOR_REQ_RESET, // 请求重置传感器
} sensor_request_t;
在此上下文中,E_SENSOR_REQ_NONE
的作用通常是作为初始值或默认值,在没有任何具体操作需求时使用
使用场景分析
-
初始化阶段
在某些嵌入式系统的初始化过程中,可能会将所有传感器的状态设置为E_SENSOR_REQ_NONE
,以表明当前系统尚未启动任何传感器功能。 -
资源释放阶段
当所有的传感器都停止工作并释放相关资源后,系统会重新进入E_SENSOR_REQ_NONE
状态,等待下一次有效的传感器请求到来。 -
错误处理机制
如果某次传感器配置失败,也可能返回到此状态,作为一种安全保护措施,防止无效的操作继续执行下去。 -
电源管理模式下的应用
结合提供的第一个引用内容来看,当设备处于低功耗模式(island mode),而外部供电轨由独立硬件控制时,可以通过设定为E_SENSOR_REQ_NONE
来完全关闭不必要的传感器通道,从而节省电能消耗 -
示例代码片段
下面展示了一个简单的伪代码例子说明如何利用此类标志变量进行基本流程控制:
sensor_request_t current_state = E_SENSOR_REQ_NONE;void process_sensor_event(event_type event){switch (event) {case EVENT_START:if(current_state == E_SENSOR_REQ_NONE){activate_sensors();current_state = E_SENSOR_REQ_ACTIVE;}break;case EVENT_STOP:deactivate_sensors();current_state = E_SENSOR_REQ_NONE;break;default:handle_unknown_event(event);break;}
}
二.Arduino常用函数
1.digitalWrite(pin, value)函数
digitalWrite(pin, value)函数的作用是设置数字引脚的状态,函数的第一个参数pin用于定义数字引脚编号,第二个参数value用于设置引脚的状态,有HIGH和LOW两种状态。在Arduino中,HIGH的电压是5V,LOW的电压是0V。因此,在Arduino板上只有一个5V电源引脚如果不够用的话,可以使用数字引脚,然后设置其输出为HIGH即可模拟一个电源引脚了。
2.digitalRead(pin)函数
Arduino的digitalRead()函数的作用是读取所指定数字引脚的状态,函数只有一个参数pin,用于定义数字输入引脚的编号。digitalRead()函数所读取的值有HIGH和LOW两种输入状态。在Arduino编程环境中,HIGH实际上就是1,所以digitalRead函数返回的是整数值HIGH(1)或LOW(0),使用int类型接收。
3.RTC Memory的基本概念和特性
RTC Memory是ESP32芯片中的一种特殊内存,分为快速存储器和慢速存储器两部分,每部分大小为8KB。RTC Memory在设备进入深度休眠模式时仍然保持供电,因此可以用于保存需要在设备重启后仍然保持的数据
esp32中有两个RTC存储器,是比较特别的SRAM存储器。RTC存储器在设备深度休眠时不掉电,一般比较多配合设备的深度休眠模式的业务场景使用。使能(一般默认使能)
RTC Memory(0)在ESP32设备中的作用主要是用于在深度休眠模式下保存关键数据,确保在设备从休眠状态唤醒时,这些数据仍然保持不变。
setRTCMemory(0, wake_times)函数的作用是设置STM32的RTC模块的唤醒时间。
在STM32中,RTC模块用于实现实时时钟功能,并且可以通过配置闹钟或唤醒定时器来实现特定的唤醒功能。setRTCMemory(0, wake_times)
函数的具体作用是将唤醒时间(wake_times
)存储在RTC模块的备份寄存器中。这里的0表示备份寄存器的索引,而wake_times
则是具体的唤醒时间值。
STM32的RTC模块可以通过多种时钟源进行配置,常见的时钟源包括低速外部时钟LSE(通常为32.768KHz的晶振)、高速外部时钟HSE的128分频,以及低速内部时钟LSI。为了确保在电源断电时仍能运行,RTC模块可以通过VBAT引脚接入外部电源供电12。
此外,STM32的RTC模块还支持闹钟A/B事件和周期唤醒功能。闹钟A/B可以设置特定的时间,当时间到达时产生中断。周期唤醒则可以通过设置一个自动重载寄存器的值来实现,当计数器达到该值时产生周期唤醒事件