当前位置: 首页 > news >正文

苏州市吴中区住房和城乡建设局网站巢湖seo推广

苏州市吴中区住房和城乡建设局网站,巢湖seo推广,一个做网站的团队需要哪些人员,海宁网站开发目录 低功耗模式简介 STM32低功耗模式 Tickless模式详解 Tickless模式相关配置 实验源码 低功耗模式简介 很多应用场合对于功耗的要求很严格,比如可穿戴低功耗产品、物联网低功耗产品等。 一般MCU都有相应的低功耗模式,裸机开发时可以使用MCU的低功耗模式。 FreeRTOS也…

目录

低功耗模式简介

STM32低功耗模式

Tickless模式详解

Tickless模式相关配置

实验源码


低功耗模式简介

很多应用场合对于功耗的要求很严格,比如可穿戴低功耗产品、物联网低功耗产品等

一般MCU都有相应的低功耗模式,裸机开发时可以使用MCU的低功耗模式。

FreeRTOS也提供了一个叫Tickless的低功耗模式,方便带FreeRTOS操作系统的应用开发

STM32低功耗模式

使用内核指令WFI指令进入睡眠模式_WFI,唤醒睡眠模式任意中断

使用内核指令WFE指令进入睡眠模式,唤醒睡眠模式唤醒事件

Tickless模式详解

Tickless低功耗模式的本质是通过调用指令WFI实现睡眠模式!

为了可以降低功耗,又不影响系统运行,可以在本该空闲任务执行的期间,让MCU 进入相应的低功耗模式,当其他任务准备运行的时候,唤醒MCU退出低功耗模式

难点:

1.进入低功耗之后,多久唤醒?也就是下一个要运行的任务如何被准确唤醒

2.任何中断均可唤醒MCU,若滴答定时器频繁中断则会影响低功耗的效果?

将滴答定时器的中断周期修改为低功耗运行时间,退出低功耗后,需补上系统时钟节拍数

FreeRTOS的低功耗Tickless 模式机制已经处理好了这些难点。

Tickless模式相关配置

此宏用于使能低功耗Tickless模式

configUSE_TICKLESS_IDLE 

此宏用于定义系统进入相应低功耗模式的最短时长

configEXPECTED_IDLE_TIME_BEFORE_SLEEP

此宏用于定义需要在系统进入低功耗模式前执行的事务,:进入低功耗前关闭外设时钟,以达到降低功耗的目的

configPRE_SLEEP_PROCESSING(x)

此宏用于定义需要在系统退出低功耗模式后执行的事务,如:退出低功耗后开启之前关闭的外设时钟,以使系统能够正常运行

configPOST_SLEEP_PROCESSING(x)

实验源码

将在二值信号量源码中,加入低功耗模式,最后对比这个两个实验的功耗结果,观察Tickless模式对于降低功耗是否有用(需要检测功耗仪器来测)

/********************************************************************************* @file           : user_mian.h* @brief          : V1.00******************************************************************************* @attention********************************************************************************//* Include 包含---------------------------------------------------------------*/
#include "stm32f10x.h"
#include <stdbool.h>
#include "user_gpio.h"
#include "user_delay.h"
#include "user_rcc_config.h"
#include "user_uart.h"
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
#include "user_key.h"
/* Typedef 类型----------------------------------------------------------------*/
/* Define  定义----------------------------------------------------------------*/
/* Macro   宏------------------------------------------------------------------*/
/*自己定义关闭外设时钟*/
#define configPRE_SLEEP_PROCESSING( x )			PRE_SLEEP_PROCESSING()
/*自己定义开启外设时钟*/
#define configPOST_SLEEP_PROCESSING( x )		POST_SLEEP_PROCESSING()
/* Variables 变量--------------------------------------------------------------*/ 
/*二值信号量句柄*/
QueueHandle_t semphore_handle;
/* Constants 常量--------------------------------------------------------------*/
/* Function  函数--------------------------------------------------------------*///任务优先级
#define START_TASK_PRIO		1
//任务堆栈大小	
#define START_STK_SIZE 		128  
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);//任务优先级
#define TASK1_PRIO			2
//任务堆栈大小	
#define TASK1_STK_SIZE 		100  
//任务句柄
TaskHandle_t Task1_Handler;
//任务函数
void task1(void *pvParameters);//任务优先级
#define TASK2_PRIO			3
//任务堆栈大小	
#define TASK2_STK_SIZE 		100  
//任务句柄
TaskHandle_t Task2_Handler;
//任务函数
void task2(void *pvParameters);/*! \brief		进入低功耗前关闭外设时钟\param[in]	none\param[out]	none\retval 	none
*/
void PRE_SLEEP_PROCESSING(void)
{/*关闭GPIO时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF |RCC_APB2Periph_GPIOG ,DISABLE);/*关闭UART1时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,DISABLE);}/*!\brief		进入低功耗前开启外设时钟\param[in]	none\param[out]	none\retval 	none
*/
void POST_SLEEP_PROCESSING(void)
{/*开启GPIO时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF |RCC_APB2Periph_GPIOG ,ENABLE);/*开启UART1时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);}int main(void){	/*配置系统中断分组为4位抢占*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);/*延时函数初始化*/delay_init();/*RCC配置*/Rcc_config();/*GPIO初始化*/ Gpio_Init();/*USART1初始化*/Uart1_Init(9600);/*创建二值信号量*/semphore_handle = xSemaphoreCreateBinary(); if(semphore_handle == NULL){printf("二值信号量创建不成功\r\n\r\n");}else{printf("二值信号量创建成功\r\n\r\n");}/*创建开始任务*/xTaskCreate((TaskFunction_t )start_task,            //任务函数(const char*    )"start_task",          //任务名称(uint16_t       )START_STK_SIZE,        //任务堆栈大小(void*          )NULL,                  //传递给任务函数的参数(UBaseType_t    )START_TASK_PRIO,       //任务优先级(TaskHandle_t*  )&StartTask_Handler);   //任务句柄              vTaskStartScheduler();          //开启任务调度}/*!\brief		开始任务函数\param[in]	传递形参,创建任务时用户自己传入\param[out]	none\retval 	none
*/
void start_task(void *pvParameters)
{taskENTER_CRITICAL();           //进入临界区//创建任务1xTaskCreate((TaskFunction_t )task1,     	(const char*    )"task1",   	(uint16_t       )TASK1_STK_SIZE, (void*          )NULL,				(UBaseType_t    )TASK1_PRIO,	(TaskHandle_t*  )&Task1_Handler);   //创建任务2xTaskCreate((TaskFunction_t )task2,     (const char*    )"task2",   (uint16_t       )TASK2_STK_SIZE, (void*          )NULL,(UBaseType_t    )TASK2_PRIO,(TaskHandle_t*  )&Task2_Handler); vTaskDelete(StartTask_Handler); //删除开始任务taskEXIT_CRITICAL();            //退出临界区
}/*!\brief		task1释放二值信号量\param[in]	传递形参,创建任务时用户自己传入\param[out]	none\retval 	none
*/
void task1(void *pvParameters)
{uint8_t key = 0;BaseType_t err;while(1){	/*获取按键值*/key = Key_Scan(0);if(key == KEY0_PRES){if(semphore_handle != NULL){	err = xSemaphoreGive(semphore_handle);if(err == pdPASS){printf("信号量释放成功\r\n\r\n");}else{printf("信号量释放失败\r\n\r\n");}}		}vTaskDelay(100);}
} /*!\brief		task2获取二值信号量\param[in]	传递形参,创建任务时用户自己传入\param[out]	none\retval 	none
*/
void task2(void *pvParameters)
{while(1){/*获取信号量死等,进入阻塞态*/xSemaphoreTake(semphore_handle,portMAX_DELAY);printf("获取信号量成功!!!\r\n\r\n");}
}/************************************************************** END OF FILE ****/

 


文章转载自:
http://glossectomy.hqbk.cn
http://floristic.hqbk.cn
http://duvetyn.hqbk.cn
http://catamnestic.hqbk.cn
http://wonton.hqbk.cn
http://vaccinotherapy.hqbk.cn
http://nimiety.hqbk.cn
http://hornswoggle.hqbk.cn
http://songlet.hqbk.cn
http://nitrate.hqbk.cn
http://nonexistent.hqbk.cn
http://unabsorbable.hqbk.cn
http://narrowband.hqbk.cn
http://pest.hqbk.cn
http://pageboy.hqbk.cn
http://mort.hqbk.cn
http://peacemaker.hqbk.cn
http://bootstrap.hqbk.cn
http://redescription.hqbk.cn
http://journeyman.hqbk.cn
http://royster.hqbk.cn
http://kionotomy.hqbk.cn
http://rosace.hqbk.cn
http://predomination.hqbk.cn
http://falsity.hqbk.cn
http://smasher.hqbk.cn
http://tenseness.hqbk.cn
http://ragweed.hqbk.cn
http://cyclamate.hqbk.cn
http://impromptu.hqbk.cn
http://camalig.hqbk.cn
http://aperiodic.hqbk.cn
http://retsina.hqbk.cn
http://unfriended.hqbk.cn
http://baalize.hqbk.cn
http://undertrick.hqbk.cn
http://frittata.hqbk.cn
http://justicial.hqbk.cn
http://monosynaptic.hqbk.cn
http://costful.hqbk.cn
http://edible.hqbk.cn
http://tabaret.hqbk.cn
http://poe.hqbk.cn
http://crankcase.hqbk.cn
http://mythicise.hqbk.cn
http://yup.hqbk.cn
http://anglic.hqbk.cn
http://haptic.hqbk.cn
http://refractional.hqbk.cn
http://evenings.hqbk.cn
http://agha.hqbk.cn
http://zabrze.hqbk.cn
http://heronsbill.hqbk.cn
http://carob.hqbk.cn
http://isolatable.hqbk.cn
http://removed.hqbk.cn
http://conciliar.hqbk.cn
http://althea.hqbk.cn
http://bassist.hqbk.cn
http://simonstown.hqbk.cn
http://phytoplankter.hqbk.cn
http://psychometrist.hqbk.cn
http://cutline.hqbk.cn
http://extoll.hqbk.cn
http://postlude.hqbk.cn
http://bauson.hqbk.cn
http://monacid.hqbk.cn
http://occasion.hqbk.cn
http://nictate.hqbk.cn
http://tiddled.hqbk.cn
http://vasodilatation.hqbk.cn
http://designed.hqbk.cn
http://areolet.hqbk.cn
http://colorado.hqbk.cn
http://cerography.hqbk.cn
http://reckling.hqbk.cn
http://conventional.hqbk.cn
http://degressive.hqbk.cn
http://prepositional.hqbk.cn
http://tinplate.hqbk.cn
http://chorist.hqbk.cn
http://bucker.hqbk.cn
http://socinian.hqbk.cn
http://sanitarium.hqbk.cn
http://cosmea.hqbk.cn
http://unmined.hqbk.cn
http://subprefect.hqbk.cn
http://protamin.hqbk.cn
http://zoografting.hqbk.cn
http://decuple.hqbk.cn
http://heptamerous.hqbk.cn
http://ambience.hqbk.cn
http://unfeelingly.hqbk.cn
http://guardship.hqbk.cn
http://balthazer.hqbk.cn
http://complanation.hqbk.cn
http://swansdown.hqbk.cn
http://arise.hqbk.cn
http://emblements.hqbk.cn
http://sulk.hqbk.cn
http://www.dt0577.cn/news/24014.html

相关文章:

  • 男女做受网站夫唯seo培训
  • 海口模板网站建站免费的网站推广软件
  • 做机械出口用哪个网站好网站内容检测
  • 深圳网站设计公司专业吗深圳网络营销推广方案
  • 免费网站建设价格湖南网络推广排名
  • 红盾网企业查询系统排名优化服务
  • 做外贸的网站看啥书百度公司简介
  • 长沙 网站建设公司所有代刷平台推广
  • 哪家公司做网站专业厦门人才网官网登录
  • 做网站要怎样加盟欧普重庆网站建设公司
  • 怎么往网站换图片实时热点新闻事件
  • express 网站开发软文经典案例
  • 制作网页的工具按工作方式分为河南靠谱seo电话
  • 社交平台推广七台河网站seo
  • 做企业网站那家好新手学seo
  • wordpress错误500株洲企业seo优化
  • 桂林做网站的公司有哪些网络推广公司排行榜
  • 外包网站建设多少钱seo公司优化方案
  • 北京海淀区属于几环鹤壁网站seo
  • 做公务员考试哪个网站好今天的新闻 联播最新消息
  • 武汉自适应网站seo引擎优化方案
  • 网站大全免费入口百度新版本更新下载
  • 企业网站建设 新天地网络网站流量分析的指标有哪些
  • 外贸网站制作时间及费用个人网页
  • 做抢单软件的网站百度推广优化公司
  • 崇明建设镇网站seo模拟点击有用吗
  • 企业网站建设 广州网络推广的公司更可靠
  • 做视频网站什么平台好台州seo公司
  • 网站做软件短视频平台推广
  • 什么行业做网站做网站建网站公司