您的位置 首页 国产IC

根据STM8S的Atomthreads低功耗的深度考虑

Atomthreads像众多操作系统一样,在没有任务调度是会调用idle。(by cpuwolf)static void atomIdleThread (uint32_t param)

  Atomthreads像很多操作体系相同,在没有使命调度是会调用idle。(by cpuwolf)

  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就停跳。其实便是上面想完成的东西。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/115061.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部