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

东莞网站建设求职简历建设网站关键词怎么写

东莞网站建设求职简历,建设网站关键词怎么写,WordPress mvc插件,更改wordpress登录图标目录 低功耗模式简介 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://www.hkea.cn/news/14576261/

相关文章:

  • 做网站用什么编程语言好网站的注册和登录界面怎么做
  • mysql 网站开发 问好工业设计公司发展方向
  • 门户网站创建常州市教育基本建设与装备管理中心网站
  • 网站建设的前景生哥seo博客
  • 蓬莱网站设计wordpress企业宣传电商
  • 石龙镇网站仿做wordpress手机版登录
  • 李青青做网站 公司主要做应用领域做的网站没给我备案
  • 鄞州区网站建设网址收录
  • 做网站需要知道的问题wordpress 商品
  • 清河企业做网站网站建设的注意
  • php网站制作软件php js做网站
  • 河南省建设厅网站中级职称上海到北京高铁多少钱
  • 东营网站建设价钱表公司软件定制开发
  • 东莞大朗网站建设推介做界面的网站
  • 中国林业建设工程网站怎样编辑网站
  • 韩国网站never黄山景区的网站做的怎么样
  • 北京朝阳网站制作有什么网站可以做设计赚钱
  • 黑马网站建设做网页
  • 企业网站seo公司做网站的公司图
  • 书画院网站建设方案wordpress 插件交互
  • 定制化网站建设公司网站建设的运作原理
  • 网站建设怎么弄轮换图片抖音引流推广软件
  • 网站维护都是一些什么公司北京做网站的工作室
  • 网站优化软件重庆网站建设重庆零臻科技行
  • 网站不交换友情链接可以吗企业网站开发的文献综述
  • 宁波市住房和城乡建设培训中心网站用pyton可以做网站吗
  • 广州专业制作网站wordpress 多域名 图片不显示
  • 青海建设厅报名网站来个手机能看的网站2021
  • 最好的购物网站广州网站建设全包
  • 外贸网站怎么做谷歌搜索apt 安装wordpress