历史上的今天
返回首页

历史上的今天

今天是:2024年11月20日(星期三)

正在发生

2019年11月20日 | Atomthreads关于STM8S低功耗的思考

2019-11-20 来源:eefocus

Atomthreads像众多操作系统一样,在没有任务调度是会调用idle。


static void atomIdleThread (uint32_t param)

{

    /* Compiler warning  */

    param = param;

 

    /* Loop forever */

    while (1)

    {

        /** todo 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就停跳。其实就是上面想实现的东西。

推荐阅读

史海拾趣

DMC Tools公司的发展小趣事

随着全球对环保问题的日益关注,DMC Tools公司也积极响应号召,致力于绿色生产。公司引进了先进的环保设备和技术,对生产过程中的废弃物进行无害化处理。同时,公司还积极推广绿色产品,帮助客户实现绿色生产。这种对环保的关注和投入不仅彰显了公司的社会责任感,也为公司赢得了良好的社会声誉。

Datalogic公司的发展小趣事

随着公司业务的不断发展,Datalogic意识到全球市场的巨大潜力。从2000年代开始,公司加快了全球化步伐,通过设立销售和服务中心,覆盖了全球100多个国家。这种全球布局不仅使Datalogic能够更好地服务全球客户,还为公司带来了更多的市场机会。

Dionics Inc公司的发展小趣事

在20世纪90年代初,Dionics Inc由几位对电子技术充满热情的工程师创立。当时,电子市场正处于快速发展期,但也面临着激烈的竞争。Dionics Inc凭借其在电源管理领域的创新技术,成功开发出一款高效节能的电源管理芯片,赢得了市场的认可。然而,随着市场的进一步开放,来自国内外的竞争对手纷纷涌入,Dionics Inc面临着巨大的挑战。

Gauthier Connectique公司的发展小趣事
能够灵敏地接收来自遥控器的微弱红外线信号,确保用户指令的准确传输。
American Technical Ceramics (ATC)公司的发展小趣事
可能是电源波动、电磁干扰等原因导致的。解决方法包括检查电源稳定性、加强电磁屏蔽等。
Decawave公司的发展小趣事

随着UWB技术的不断发展和应用领域的不断扩展,Decawave不断丰富和完善其产品和解决方案。除了UWB芯片外,公司还推出了与UWB芯片兼容的模块和开发工具,以及针对特定应用场景的解决方案。这些产品和解决方案不仅满足了客户的不同需求,也进一步巩固了Decawave在UWB技术领域的领先地位。

问答坊 | AI 解惑

高频电路设计资料

这高频电路设计资料应该对参加竞赛的同学有用,欢迎。。。。。。…

查看全部问答>

基于单片机频率合成器

基于单片机频率合成器设计矿业大学99毕业论文频率合成和锁相技术是近年来发展起来的新兴技术。它们在雷达、通信、遥控遥测、电视广播和电子测量仪器等领域已得到广泛的应用。 频率合成器的应用之所以广泛,大概主要归因于两种趋向:一是由于通信频 ...…

查看全部问答>

如何产生负电压

如何产生负电压? 1、电荷泵提供负压 TTL电平/232电平转换芯片(如,MAX232,MAX3391等)是最典型的电荷泵器件可以输出较低功率的负压。但有些LCD要求-24V的负偏压,则需要另外想办法。可用一片max232为LCD模块提供负偏压。TTL-in接高电平,RS232- ...…

查看全部问答>

DSP芯片的应用

自从DSP芯片诞生以来,DSP芯片得到了飞速的发展。DSP芯片高速发展,一方面得益于集成电路的发展,另一方面也得益于巨大的市场。在短短的十多年时间,DSP芯片已经在信号处理、通信、雷达等许多领域得到广泛的应用。目前,DSP芯片的价格也越来越低, ...…

查看全部问答>

求助 tb6560步进电机驱动设计+单片机控制系统

想求求各位大虾帮帮忙     看看用单片机控制步进电机正反转 调速  怎么弄    步进电机驱动是   用tb6560做的   我买了    步进驱动器--tb6560ahq-v2.0(0.5-3A ,2、8、1 ...…

查看全部问答>

咨询一下,正版的 protel,ADS ,keil for ARM 等软件要多少钱?

咨询一下,正版的 protel,ADS ,keil for ARM 等软件要多少钱?…

查看全部问答>

求救 arm数据保护问题

最近在做一个项目是关于串口通信的 要从外部接收大量的一个字节一个字节的数据 想把接收的某一部分存在norflash中用数组该怎么声明呢??(ADS编译器) 放在ram中又该怎么声明呢??? 如果不用数组直接放(NORFLASH,RAM)的话怎么能保证自己 ...…

查看全部问答>

vxworks深入学习,请教各位了

最近学习vxworks,看的书大多是tornado的帮助文件 现在能进行vxworks上的应用程序的开发 ,在vmware上启动vxworks 对于bootloader,BSP,有些了解,了解如何在vxworks上建立http服务器(从eeworld上获得代码做的实验) 现在想深入的学习,请教各位 ...…

查看全部问答>

请介绍些Windows mobile 5.0 pocket pc 平台级(操作系统的定制)开发的资料?

请介绍些Windows mobile 5.0 pocket pc 平台级开发的资料? 注意不是应用软件端的开发,是操作系统的定制。 我装了VS2005 以及一些SDK 模拟器,只找到程序端的开发的资料。 我网上找了,没找到像介绍Platformbuilder 4.2,Platformbuilder 5.0,Pl ...…

查看全部问答>