充电管理新手必修课:exchg扩展库让续航焦虑成历史!

还在为设备电量焦虑?exchg扩展库是新手必修课!通过智能充电调度与能耗监控,自动延长续航时间,简化管理流程,即使零经验也能轻松应对各种充电场景!

本文主要分享exchg扩展库的相关函数说明及代码示例,实际开发中可结合LuatOS生态灵活运用。

注意:开启充电exchg.start()和关闭充电exchg.stop()默认自动执行,可以不用操作;当碰到某些需要手动关闭或开启充电功能的场景时,大家可以自行控制,当前仅为预留。

扩展库最新资料详见:

https://docs.openluat.com/osapi/ext/exchg/

一、exchg.start()

1.1 函数功能

用于开启充电;

必须在task中运行,最大阻塞时间大概为700ms,阻塞主要由sys.waitUntil("YHM27XX_REG", 500)和sys.wait(200)产生。

1.2 参数说明

参数:无;

返回值:boolean:true=成功,false=失败。

1.3 代码示例

二、exchg.stop()

2.1 函数功能

用于关闭充电;

必须在task中运行,最大阻塞时间大概为700ms,阻塞主要由sys.waitUntil("YHM27XX_REG", 500)和sys.wait(200)产生。

2.2 参数说明

参数:无;

返回值:boolean:true=成功,false=失败。

2.3 代码示例

三、exchg.setup(v_battery, cap_battery, i_charge)

3.1 函数功能

用于设置电池的充电截止电压/电池容量/充电电流;

必须在task中运行,最大阻塞时间大概为700ms,阻塞主要由sys.waitUntil("YHM27XX_REG", 500)和sys.wait(200)产生。

3.2 参数说明

v_battery:number,电池充电截止电压(单位:mV);取值范围:4200或4350可选, 必须传入。

cap_battery:number,电池容量(单位:mAh);取值范围:>= 100,必须传入。

i_charge:string,充电电流;

取值范围:exchg.CCMIN(最小电流)exchg.CCDEFAULT(默认电流) exchg.CCMAX(最大电流)三个可选参数,不传入时默认值为exchg.CCDEFAULT。

返回值:boolean:true=成功,false=失败。

3.3 代码示例

四、exchg.status()

4.1 函数功能

获取充电系统状态信息,必须在task中运行,最大阻塞时间(包括超时重试时间)大概为20s。

该函数用于获取当前充电系统的完整状态,包括电池电压、充电阶段、充电状态、电池在位状态、充电器在位状态以及IC过热状态等信息。

其中充电器是否在位,中断触发,触发回调事件为:

CHARGER_STATE_EVENT,附带的参数true表示充电器在位,false表示充电器不在位。

4.2 参数说明

参数:无;

返回值:table,状态信息表。

4.3 状态信息表

五、exchg.on(func)

5.1 函数功能

该函数用于注册exchg事件回调。

5.2 参数说明

参数:function,回调方法;

回调时传入参数有:exchg.OVERHEATexchg.CHARGER_INexchg.CHARGER_OUT

返回值:nil,无返回值。

5.3 代码示例

今天的内容就分享到这里了~

1、值传递的一个错误认识 先看一段关于Exchg1 函数的代码: void Exchg1(int x, int y) /* 定义中的x,y变量被称为Exchg1 函数的形式参数 */ { int tmp; tmp = x; x = y; y = tmp; printf("x = %d, y = %d.\n", x, y); } 问:你认为这个函数是在做什么呀? 答:好像是对参数 x、y 的值对调吧? 请往下看,我想利用这个函数来完对 a,b 两个变量值的对调,程序如下: int main() { int a = 4,b = 6; Exchg1(a, b); /*a,b 变量为 Exchg1 函数的实际参数。*/ printf("a = %d, b = %d.\n”, a, b); return(0); } 我问:Exchg1()里头的 printf(“x = %d, y = %d.\n”, x, y);语句会输出什么啊? 我再问:Exchg1()后的 printf("a = %d, b = %d.\n”, a, b);语 句输出的是什么? 程序输出的结果是: x = 6, y = 4. a = 4, b = 6. 为什么不是 a = 6,b = 4 呢? 奇怪,明明我把 a、b 分别代入了 x、y 中,并在函数里完了两个变量值的交换,为什么 a、b 变量值还是没有交换(仍然是 a = 4、b= 6,而不是 a = 6、b = 4)?如果你也会有这个疑问,那是因为你根本就不知实参 a、b 与形参 x、y 的关系了。 2、一个预备的常识 为了说明这个问题,我先给出一个代码: int a = 4; int x; x = a; x = x + 3; 看好了没,现在我问你:最终 a 值是多少,x 值是多少? (怎么搞的,给我这个小儿科的问题。还不简单,不就是 a = 4、x = 7 嘛!) 在这个代码中,你要明白一个东西:虽然 a 值赋给了 x,但是 a 变量并不是x 变量哦。我们对 x 任何的修改,都不会改变 a变量。呵呵!虽然简单,并且一看就理所当然,不过可是一个很重要的认识喔。 3、理解值传递的形式 看调用 Exch1 函数的代码: int main() { int a = 4,b = 6; Exchg1(a, b) /* 这里调用了 Exchg1 函数 */ printf("a = %d, b = %d.\n", a, b); } Exchg1(a, b)时所完的操作代码如下所示。 int x = a; /* ← */ int y = b; /* ← 注意这里,头两行是调用函数时的隐含操作 */ int tmp; tmp = x; x = y; y = tmp; AI写代码 c 运行 1 2 3 4 5 6 请注意在调用执行 Exchg1 函数的操作中我人为地加上了头两句: int x = a; int y = b; AI写代码 c 运行 1 2 3 这是调用函数时的两个隐含动作。它确实存在,现在我只不过把它显式地写了出来而已。问题一下就清晰起来啦。(看到这里,现在你认为函数里面交换操作的是a、b 变量或者只是 x、y 变量呢?) 原来 ,其实函数在调用时是隐含地把实参 a、b 的值分别赋值给了 x、y,之后在你写的 Exchg1 函数体内再也没有对 a、b 进行任何的操作了。交换的只是 x、y 变量。并不是 a、b。当然 a、b 的值没有改变啦!函数只是把 a、b 的值通过赋值传递给了 x、y,函数里头操作的只是 x、y 的值并不是 a、b 的值。这就是所谓的参数的值传递了。 哈哈,终于明白了,正是因为它隐含了那两个的赋值操作,才让我们产生了前述的迷惑(以为 a、b 已经代替了 x、y,对 x、y 的操作就是对a、b 的操作了,这是一个错误的观点啊!) 总结这段文字,提取重要知识点,帮我改写一篇讲述值传递的文章
07-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值