Q群:
电话:
邮箱:
地址:
温湿度计的低功耗是为了验证低功耗框架在具体的产品中是否真正有作用,找到的一款产品;原产品是基于FreeRTOS系统,我们做的是基于OneOS进行开发,实现温湿度读取和低功耗功能。
温湿度计使用的芯片是APOLLO512-KBR,OneOS已经完成了此款芯片的BSP适配,工程路径:oneos\projects\apollo;复制apollo文件夹粘贴为apollo_th,在apollo_th下进行温湿度计的开发。
温湿度计是一款具体的产品,没有预留烧写口和串口,通过焊接飞线方式引出连线,如下:
(Top) → Drivers → I2C
OneOS Configuration
[*] Using I2C device drivers
[*] Use GPIO to simulate I2C
(10) simulate I2C bus delay(us)
[*] Enable I2C1 BUS (software simulation) --->
[ ] Enable I2C2 BUS (software simulation) ----
[ ] Enable I2C3 BUS (software simulation) ----
[ ] Enable I2C4 BUS (software simulation) ----
[ ] Use at24cxx eeprom
I2C的SCL和SDA管脚分别是5和6
→ Drivers → I2C → Using I2C device drivers → Use GPIO to simulate I2C → Enable I2C1 BUS (software stion)
OneOS Configuration
(5) i2c1 scl pin number
(6) I2C1 sda pin number
2.打开低功耗使能配置
(Top) → Drivers→ Low power manager
OneOS Configuration
[*] Enable low power manager drivers
3.Esc键退出menuconfig,注意保存所修改的设置。
温湿度计使用的串口io和工程apollo不同,需要修改串口IO(board.h):
//#define UART0_GPIO_RX 40
//#define UART0_GPIO_CFG_RX AM_HAL_PIN_40_UARTRX
//#define UART0_GPIO_TX 14
//#define UART0_GPIO_CFG_TX AM_HAL_PIN_14_UARTTX
#define UART0_GPIO_RX 23
#define UART0_GPIO_CFG_RX AM_HAL_PIN_23_UARTRX
#define UART0_GPIO_TX 22
#define UART0_GPIO_CFG_TX AM_HAL_PIN_22_UARTTX
主要功能代码如下(main.c),分析见注释:
static void send_task(void *parameter)
{
LPMGR_TIME_S *time = OS_NULL;
lpmgr_hard_init();
/* 注册用户回调函数,回调函数里是用户在进入和退出低功耗处理的事物,主要起作用接口os_lpmgr_notify_set() */
lpmgr_dev_init();
os_lpmgr_request(3); /* 请求进入低功耗模式3 */
os_kprintf("[%s]-[%d], reques sleep mode, tick[%d]\r\n", __FILE__, __LINE__, os_tick_get());
while (1)
{
/* 请求模式0,模式0和1是正常运行模式,一般请求了0或者1模式,就阻止了系统进入低功耗 */
os_lpmgr_request(0);
os_kprintf("[%s]-[%d], exit sleep mode, tick[%d]\r\n", __FILE__, __LINE__, os_tick_get());
time = lpmgr_time_get();
/* 延时,增加用户运行态的时间,便于观察现象 */
os_task_msleep(time->run_time * 1000);
/* 用户任务,这里是读取温湿度并通过串口打印出来 */
task_run();
os_kprintf("[%s]-[%d], enter sleep mode, tick[%d], run_time[%d], sleep_time[%d]\r\n\n\n",
__FILE__, __LINE__, os_tick_get(), time->run_time, time->sleep_time);
/* 前面请求了低功耗模式3,但又请求了模式0,功耗模式会执行模式最小的模式0,既正常运行模式,这里释放了模式0,会执行模式3的低功耗 */
os_lpmgr_release(0);
/* sleep sleep_time 秒,会在idle任务里面进入低功耗,睡眠的时间是sleep_time秒 */
os_task_msleep(time->sleep_time * 1000);
}
}
在上一步打开的 OneOS-Cube 工具命令行输入 scons --ide=mdk5 构建工程;