atomthreads像众多操作系统一样,在没有任务调度是会调用idle。(by cpuwolf)
static void atomidlethread (uint32_t param)
{
/* compiler warning */
param = param;
/* loop forever */
while (1)
{
/** odo provide user idle hooks*/
}
}
atomthreads中atomidlethread()是以线程的形式存在,也就是最低优先级线程。作者默认没有填写这个函数。
uint8_t atomosinit (void *idle_thread_stack_top, uint32_t idle_thread_stack_size)
{
uint8_t status;
/* initialise data */
curr_tcb = null;
tcbreadyq = null;
atomosstarted = false;
/* create the idle thread */
status = atomthreadcreate(&idle_tcb,
idle_thread_priority,
atomidlethread,
0,
idle_thread_stack_top,
idle_thread_stack_size);
/* return status */
return (status);
}
针对stm8我们最自然想到的是在其中加一个wfi,stm8进入wfi模式几乎不会影响任何外设的运行。以stm8s105k4为例,其进入该模式的典型电流是1.8ma。这个电流,用一节2000ma手机供电,理论上也最多能坚持46天,才一个月多点。这个记录太差了。
stm8还有一个halt模式,这是该芯片的最低功耗模式,电流是ua级别。但是该模式有诸多限制,进入该模式系统几乎所有的clock都停止,你的timer,adc,uart等等全部停止,除了awu。
atomthreads如果你在idle直接进入halt,因为基本只有外部中断可以唤醒退出这个模式,当系统醒来了,请你想想,你的系统心跳还准么?你的应用线程如果使用了定时器,本来希望1秒钟后调用某个callback,结果halt睡了5分钟,那还是定时器api本身参数的意义么?
对datasheet熟悉的读者可能,可能立刻想到了awu,似乎可以解决这个问题。在idle进入halt前,把还能睡的时间填入awu,这样系统就可以在制定的时间被唤醒。粗略的一看,还以为问题解决了。
暂时不谈awu的时间不是任意值都可以接受的,是一个非常不准确的唤醒时钟。
举个其他例子,如果idle进入halt前,系统还可以睡20分钟,我觉的一个设计优良的低功耗系统,应用层让系统有睡20分钟的可能性是很起码的。不幸的是,在5分钟的时候,一个外部中断进来了,系统很自然退出halt。我想问你,从系统的角度看,系统之前睡了多久。不要告诉玩我是5分钟,大哥,那是我假设的,我问得是,从系统的角度。睡了多久?awu这个唯一在运行的模块,上面是没有时间让你读的,你完全无法得知刚才睡了多久。
其实上面的这个理念不是我创造的,在linux中早就有了,它叫variable tick timer,什么意思?通常我们的心跳时钟,是有规律的触发中断,比如10ms一次,这导致系统最多能安静10ms,想多睡会儿?没门!10ms后中断就来了。这种设计对低功耗是不利的。后来就有大牛,引入了variable tick timer,这里tick timer就是我们上面一直说的心跳时钟。variable就是可变的罗!表面意思就是我们的心脏可以走走停停,这样想已经不符合人类的自然规律,所以也确实不能再叫heart beattimer。当系统醒的时候,是有规律的跳动,当系统睡眠的时候, timer就停跳。其实就是上面想实现的东西。
苹果iPhone14后壳被透明改造 可看见内部组件
英威腾网能荣获“技术创新”奖
AMD执行长苏姿丰19日会台积、电子5哥
电感器的充放电过程
Vivox60如何切换系统,如何切换到经典桌面
STM8S如何实现Atomthreads最低功耗
战事升级:高通要求美国禁止进口iPhone
合力泰积极布局LCP柔性线路板领域,解决智能终端产品高需求
为什么 MySQL 单表不能超过 2000 万行?
!销售/收购/维修MT8852A蓝牙测试仪MT8852B!
鲁大师2023年Q1电脑排行:AMD性能狂飙,NVIDIA进退两难,好生热闹!
德州仪器推出新型SafeTI设计软件包
消防中多线和总线的区别
吉利汽车与沃尔沃达成最新的合并方案
虹科干货 | MQTT 5协议中的基础更改(一)
比特币转账的手续费到底该如何计算
RFID标签读写器让工地仓库管理转向无人化、数字化
碳化硅二极管的应用领域及优势你知道吗
英飞凌寻求30亿欧元以下的收购 228亿人民币
安森美半导体推出移动医疗电子设备的系统级封装方案