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

建设银行的官方网站电脑版导购网站的seo怎么做

建设银行的官方网站电脑版,导购网站的seo怎么做,秦都区建设局网站,青岛网站建设设计1. 任务挂起和恢复的 API 函数 API函数描述vTaskSuspend()挂起任务vTaskResume()恢复被挂起的任务xTaskResumeFromISR()在中断中恢复被挂起的任务 挂起#xff1a;挂起任务类似暂停#xff0c;可恢复#xff1b; 删除任务#xff0c;堆栈都给释放掉了#xff0c;无法恢复…1. 任务挂起和恢复的 API 函数 API函数描述vTaskSuspend()挂起任务vTaskResume()恢复被挂起的任务xTaskResumeFromISR()在中断中恢复被挂起的任务 挂起挂起任务类似暂停可恢复 删除任务堆栈都给释放掉了无法恢复类似“人死两清”恢复恢复被挂起的任务“FromISR”带FromISR后缀是在中断函数中专用的 API 函数。不管你是 FreeRTOS 的哪一个 API 函数只要你在中断服务函数中要调用那么你肯定是有一个 FromISR 后缀的。 挂起任务和删除任务本质上的区别能否恢复。 1.1 任务挂起 函数原型 void vTaskSuspend(TaskHandle_t xTaskToSuspend) 形参描述xTaskToSuspend待挂起任务的任务句柄 此函数用于挂起任务使用时需将宏 INCLUDE_vTaskSuspend 配置为 1。无论优先级如何被挂起的任务都将不再被执行直到任务被恢复 。 注意当传入的参数为NULL则代表挂起任务自身当前正在运行的任务 1.2 任务恢复 1.2.1 任务中恢复在任务函数中调用 函数原型 void vTaskResume(TaskHandle_t xTaskToResume) 形参描述xTaskToResume待恢复任务的任务句柄 使用该函数注意宏INCLUDE_vTaskSuspend必须定义为 1 注意任务无论被 vTaskSuspend() 挂起多少次只需在任务中调用 vTakResume() 恢复一次就可以继续运行。且被恢复的任务会进入就绪态 任务挂起不支持嵌套 1.2.2 中断中恢复在中断服务函数中调用 函数原型 BaseType_t xTaskResumeFromISR(TaskHandle_t xTaskToResume) 形参描述xTaskToResume待恢复任务的任务句柄 返回值描述pdTRUE任务恢复后需要进行任务切换pdFALSE任务恢复后不需要进行任务切换 什么情况下需要进行任务切换 就是你要恢复的这个任务它的优先级大于我们当前正在执行的这个任务这时候由于抢占式调度优先级高的任务要抢占当前正在执行的任务那这时候就得进行一个任务切换了。如果你的优先级比较低呢那么此时它就返回 pdFALSE那这时候你就不需要进行任务切换。 所以我们如果在中断服务函数中调用这个函数那么你就要判断它的一个返回值了来确定是否需要手动执行一次任务切换portYIELD_FROM_ISR。 使用该函数注意宏INCLUDE_vTaskSuspend 和 INCLUDE_xTaskResumeFromISR 必须定义为 1该函数专用于中断服务函数中用于解挂被挂起任务 注意中断服务程序中要调用 FreeRTOS 的 API 函数则中断优先级不能高于 FreeRTOS 所管理的最高优先级。 我们的代码 FreeRTOS 所管理的中断优先级是 5~15也就是说中断服务函数的中断优先级必须在这个范围内那如果你在 0~4比 5~15 优先级要高它就不属于 FreeRTOS 所管理的一个范围了。 注意任务优先级跟中断优先级的区别任务优先级是数值越大优先级越高中断优先级是数值越小优先级越高。 2. 实战编程 实验目的学会使用FreeRTOS中的任务挂起与恢复相关API函数vTaskSuspend( )、vTaskResume( )、xTaskResumeFromISR( ) 实验设计将设计四个任务start_task、task1、task2、task3 四个任务的功能如下 start_task用来创建其他的三个任务task1实现LED0每500ms闪烁一次task2实现LED1每500ms闪烁一次task3判断按键按下逻辑KEY0按下挂起task1按下KEY1在任务中恢复task1按下KEY2在中断中恢复task1外部中断线实现 2.1 任务中恢复 2.1.1 宏 INCLUDE_vTaskSuspend 置 1 2.1.2 编写任务函数 task1、task2、task3 任务函数 /* 任务一实现LED0每500ms翻转一次 */ void task1( void * pvParameters ) {uint32_t task1_num 0; /* 运行次数 */while(1){printf(task1_num:%d\r\n,task1_num);LED0_TOGGLE();vTaskDelay(500);} }/* 任务二实现LED1每500ms翻转一次 */ void task2( void * pvParameters ) {uint32_t task2_num 0;while(1){printf(task2_num:%d\r\n,task2_num);LED1_TOGGLE();vTaskDelay(500);} }/* 任务三判断按键按下逻辑 */ void task3( void * pvParameters ) {uint8_t key 0;while(1){key key_scan(0);if(key KEY0_PRES){printf(挂起task1\r\n);vTaskSuspend(task1_handler); /* 挂起 task1 任务 */}else if(key KEY1_PRES){printf(在任务中恢复task1\r\n);vTaskResume(task1_handler); /* 恢复 task1 任务 */}vTaskDelay(10);} }task3 的延时时间是比较快的那它的运行次数肯定很多很多如果打印的话你很难看到 task1 和 task2 的运行次数的打印信息。 2.2 中断中恢复 2.2.1 宏 INCLUDE_vTaskSuspend 和 INCLUDE_xTaskResumeFromISR 置 1 2.2.2 编写中断服务函数 exti.c #include ./SYSTEM/sys/sys.h #include ./SYSTEM/delay/delay.h #include ./BSP/LED/led.h #include ./BSP/KEY/key.h #include ./BSP/EXTI/exti.h #include FreeRTOS.h #include task.hextern TaskHandle_t task1_handler; /* 外部声明 task1 句柄 */ /*** brief KEY2 外部中断服务程序* param 无* retval 无*/ void KEY2_INT_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(KEY2_INT_GPIO_PIN); /* 调用中断处理公用函数 清除KEY2所在中断线 的中断标志位中断下半部在HAL_GPIO_EXTI_Callback执行 */__HAL_GPIO_EXTI_CLEAR_IT(KEY2_INT_GPIO_PIN); /* HAL库默认先清中断再处理回调退出时再清一次中断避免按键抖动误触发 */ }/*** brief 中断服务程序中需要做的事情在HAL库中所有的外部中断服务函数都会调用此函数* param GPIO_Pin:中断引脚号* retval 无*/ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {delay_ms(20); /* 消抖 */switch(GPIO_Pin){BaseType_t xYieldRequired;case KEY2_INT_GPIO_PIN:if (KEY2 0){xYieldRequired xTaskResumeFromISR(task1_handler);printf(在中断中恢复task1\r\n);}if(xYieldRequired pdTRUE){portYIELD_FROM_ISR(xYieldRequired);}break;default : break;} }/*** brief 外部中断初始化程序* param 无* retval 无*/ void extix_init(void) {GPIO_InitTypeDef gpio_init_struct;key_init(); gpio_init_struct.Pin KEY2_INT_GPIO_PIN;gpio_init_struct.Mode GPIO_MODE_IT_FALLING; /* 下降沿触发 */gpio_init_struct.Pull GPIO_PULLUP;HAL_GPIO_Init(KEY2_INT_GPIO_PORT, gpio_init_struct); /* KEY2配置为下降沿触发中断 */HAL_NVIC_SetPriority(KEY2_INT_IRQn, 5, 0); /* 抢占5子优先级0 */HAL_NVIC_EnableIRQ(KEY2_INT_IRQn); /* 使能中断线2 */} 因为我们要在中断服务函数里面调用 FreeRTOS 的 API 函数而 FreeRTOS 要求我们 把优先级分组的所有位都用做抢占式而不能用作我们的一个子优先级 FreeRTOS 官网 建议将所有优先级位指定为抢占优先级位不留下任何优先级位作为子优先级位其他的任何配置都会使 configMAX_SYSCALL_INTERRUPT_PRIORITY 宏设置与分配给各个外设中断的优先级之间的直接关系复杂化。 也就是说为什么都要设置为抢占式优先级就是为了 FreeRTOS 方便管理比如它非常复杂官网明确表态了。 那怎么设置它全部用作抢占式优先级通过调用 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);来确保将所有优先级位分配为抢占优先级位。 stm32f4xx_hal.c HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);中断的优先级不能高于 FreeRTOS 所管理的优先级。 FreeRTOS 官网 以 “FromISR” 结尾的 FreeRTOS 函数是中断安全的但前提是调用这些函数的中断的逻辑优先级不高于 configMAX_SYSCALL_INTERRUPT_PRIORITY 定义的优先级FreeRTOS 可管理的最高中断优先级。 所以我们一定要确保中断的逻辑优先级等于或小于 configMAX_SYSCALL_INTERRUPT_PRIORITY。 HAL_NVIC_SetPriority(KEY2_INT_IRQn, 5, 0); /* 抢占5子优先级0 */如果不满足以上两点要求就不能在中断服务函数中调用 FreeRTOS 的 API 函数。 exti.h #ifndef __EXTI_H #define __EXTI_H#include ./SYSTEM/sys/sys.h/******************************************************************************************/ /* 引脚 和 中断编号 中断服务函数 定义 */ #define KEY0_INT_GPIO_PORT GPIOH #define KEY0_INT_GPIO_PIN GPIO_PIN_3 #define KEY0_INT_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOH_CLK_ENABLE(); }while(0) /* PH口时钟使能 */ #define KEY0_INT_IRQn EXTI3_IRQn #define KEY0_INT_IRQHandler EXTI3_IRQHandler#define KEY1_INT_GPIO_PORT GPIOH #define KEY1_INT_GPIO_PIN GPIO_PIN_2 #define KEY1_INT_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOH_CLK_ENABLE(); }while(0) /* PH口时钟使能 */ #define KEY1_INT_IRQn EXTI2_IRQn #define KEY1_INT_IRQHandler EXTI2_IRQHandler#define KEY2_INT_GPIO_PORT GPIOC #define KEY2_INT_GPIO_PIN GPIO_PIN_13 #define KEY2_INT_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOC_CLK_ENABLE(); }while(0) /* PC口时钟使能 */ #define KEY2_INT_IRQn EXTI15_10_IRQn #define KEY2_INT_IRQHandler EXTI15_10_IRQHandler#define WKUP_INT_GPIO_PORT GPIOA #define WKUP_INT_GPIO_PIN GPIO_PIN_0 #define WKUP_INT_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0) /* PA口时钟使能 */ #define WKUP_INT_IRQn EXTI0_IRQn #define WKUP_INT_IRQHandler EXTI0_IRQHandler/******************************************************************************************/void extix_init(void); /* 外部中断初始化 */#endifmain.c #include ./SYSTEM/sys/sys.h #include ./SYSTEM/usart/usart.h #include ./SYSTEM/delay/delay.h #include ./BSP/LED/led.h #include ./BSP/LCD/lcd.h #include ./BSP/KEY/key.h #include ./BSP/SDRAM/sdram.h #include ./MALLOC/malloc.h #include freertos_demo.h #include ./BSP/EXTI/exti.hint main(void) {HAL_Init(); /* 初始化HAL库 */sys_stm32_clock_init(360, 25, 2, 8); /* 设置时钟,180Mhz */delay_init(180); /* 延时初始化 */usart_init(115200); /* 串口初始化为115200 */led_init(); /* 初始化LED */key_init(); /* 初始化按键 */sdram_init(); /* SRAM初始化 */lcd_init(); /* 初始化LCD */extix_init(); /* 外部中断初始化 */my_mem_init(SRAMIN); /* 初始化内部内存池 */my_mem_init(SRAMEX); /* 初始化外部内存池 */my_mem_init(SRAMCCM); /* 初始化CCM内存池 */freertos_demo(); }3. 课堂总结
http://www.zqtcl.cn/news/988970/

相关文章:

  • 乐至建设局网站工程项目管理软件哪个好
  • 太原公司网站建立wordpress插件直播
  • 比较有名的diy制作网站做照片视频的网站
  • 河北石家庄建设网站wordpress nginx apache
  • 上海免费网站建设品牌wordpress主题安装失败下载失败
  • 买公司的网站商城系统开发
  • 网页设计国外设计欣赏网站深夜视频在线免费
  • 做网站怎么租用服务器杭州网站建设hzyze
  • .asp 网站北京最新防疫信息
  • 网站上传用什么软件做视频教程114查询
  • 网站小图标素材网站开发需要提供哪些东西
  • 阿里巴巴国际站买家入口百度建网站多少钱
  • 为网站网站做代理怎么判wordpress 调用当前分类名称
  • 多用户网站管理系统定制网站建设与运营案例
  • 毕业设计做的网站抄袭网站开发执行文档
  • 自己做网站都要什么软件网址你懂我意思正能量不用下载
  • 网站内容的创新wordpress美食主题
  • 程序员做游戏还是做网站好雅安移动网站建设
  • wordpress伪静态大学seo诊断网站免费诊断平台
  • 企业网站模板下载软件商务网站规划与建设心得
  • 做网站的像素是多少钱郑州公司网页
  • 北京游戏网站建设特殊符号网站
  • c 网站开发技术代注册公司要多少钱
  • 设计师参考效果图网站如何写网站建设实验结果分析
  • 网站备案 营业执照做企业网站注意些啥
  • 网站建设公司济南网络教学平台昆明理工大学
  • 原网站开发新功能世赛网站开发
  • 做一款小程序需要多少钱凡科的网站做seo比较难
  • 北京网页设计与网站建设最专业的手机网站建设
  • 做一个网站广州网站备案拍照