建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块

longday

发帖: 1粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2018-11-29 16:00:27 4276 13 楼主 显示全部楼层
[问题求助] STM32F476RG BC28 搭载liteos ,低功耗设置求助

硬件平台: 主控MCU stm32F476RG ,NB 通信模块:移远BC28

软件环境:主控MCU 运行LiteOS

设备要求:低功耗,支持FOTA远程升级mcu主控和NB固件

场景描述:室外数据采集监测,数据发送间隔1小时;


问题描述: 之前程序采用MSI时钟,经过PLL升级后,SYS主时钟为80M。数据采集上传稳定正常,liteos任务切换正常。

        因低功耗考虑,引入了tickless机制。参考了 “EVB_M1_Liteos-master”tickless部分代码。

        A第一版程序设计:

            第一次进入ticklessHandler,Mcu进入stop模式,1h后rtc唤醒。如下图所示,芯片唤醒后,任务不能切换。

           考虑到可能是 osUpdateKernelTickCount函数设置不对,该函数每次要求传入一个本次休眠的tick数

void osTicklessHandler(void)
{
#if (LOSCFG_PLATFORM_HWI == YES)
....
#else
    if (g_bTickIrqFlag)
    {
        UINTPTR uvIntSave;
        uvIntSave = LOS_IntLock();
        LOS_TaskLock();
        g_bTickIrqFlag = 0;
        osTicklessStart();


        //第一次进入ticklessHandler,Mcu进入stop模式,1h后rtc唤醒

        #if (LOSCFG_KERNEL_RUNSTOP == YES)
         enterSotpMode(SleepSeconds);

        #endif

        ......................
          
        uvIntSave = LOS_IntLock();
        osUpdateKernelTickCount(0);  /* param: 0 - invalid */
        LOS_TaskUnlock();
        LOS_IntRestore(uvIntSave);
    }

........................

}


B 第二版设计

每次睡眠可以tickless可以的时间

  enterSotpMode(g_uwSleepTicks);


 tickless 有两个重要的变量,每次可以睡眠的tick数由他们决定。由此可知,当OS_SYS_CLOCK越小,每次进入osTicklessHandler,可以休眠的时间更长。

void osTicklessStart(void)
{
    UINT32 uwCyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND;  
    UINT32 uwMaxTicks = LOSCFG_SYSTICK_LOAD_RELOAD_MAX / uwCyclesPerTick

..............

}

使用HSE 8M,降低systick主时钟为1M

4a01cadac5a6e60e98f27442fcd7ff1.png

当时钟钟低于1M的,任务不能正常切换


在降低时钟后

HAL_DELAY函数 LOS_TaskDelay函数  LOS_TickCountGet

int los_dev_uart_read(int uartidx, char *outbuf, int rsize, int mstimout)

int los_dev_uart_write(int uartidx, char *inbuf, int wsize, int mstimout)

这些和时间有关系的都不太正常

即便在1M的主频下可以运行,每次进入tickless最多可以睡眠16s样子,这样休眠1h,需要不断醒来在睡。



总结:个人觉得低功耗应该还是第一种设计,但是第一种设计下,睡眠后liteos如何正确的工作进行仍无调度呢?请各位高手赐教




举报
分享

分享文章到朋友圈

分享文章到微博

MaxSu

发帖: 2粉丝: 2

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2018-11-29 16:41:29 沙发 显示全部楼层


楼主真是细致啊,赞叹


整理一下再回复

点赞1 回复 举报

六斤

发帖: 28粉丝: 14

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2018-11-29 17:03:20 板凳 显示全部楼层
MaxSu 发表于 2018-11-29 16:41 楼主真是细致啊,赞叹整理一下再回复

苏大师不要只点赞,期待你的指导呢

点赞 回复 举报

海鹏

发帖: 3粉丝: 4

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2018-11-29 17:19:22 地板 显示全部楼层
六斤 发表于 2018-11-29 17:03 苏大师不要只点赞,期待你的指导呢

同等大师回复,大师思路整理还挺耗时的

点赞 回复 举报

wsm

发帖: 0粉丝: 1

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2018-11-30 17:37:34 5# 显示全部楼层
  1. osTicklessHandler在什么地方调用?什么任务中调用?是idle吗?

  2. 你用的什么版本?


点赞 回复 举报

longday

发帖: 1粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2018-12-3 16:19:15 6# 显示全部楼层
wsm 发表于 2018-11-30 17:37 osTicklessHandler在什么地方调用?什么任务中调用?是idle吗?你用的什么版本?

osTicklessHandler 在idle 任务中调用

点赞 回复 举报

Kinarethy

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2018-12-8 12:09:11 7# 显示全部楼层

大师的回复呢

点赞 回复 举报

jiekechoo

发帖: 18粉丝: 0

级别 : 合作伙伴

发消息 + 关注

发表于2018-12-8 15:07:40 8# 显示全部楼层

我也想得到一份完整的低功耗范例

点赞 回复 举报

小熊梦工厂

发帖: 5粉丝: 5

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2018-12-10 09:45:00 9# 显示全部楼层

低功耗就最好不要用F系列单片机,,,,

点赞 回复 举报

愚哉子安

发帖: 4粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2018-12-11 09:12:37 10# 显示全部楼层

请问这个“EVB_M1_Liteos-master”在哪里有下载??

点赞 回复 举报

游客

您需要登录后才可以回帖 登录 | 立即注册