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

网上书店网站开发百度收录提交入口

网上书店网站开发,百度收录提交入口,龙华网站建设设计制作公司,怎么做多语言网站目录 FreeRTOS学习第6篇--任务状态挂起恢复删除等操作任务的状态设计实验IRReceiver_Task任务相关代码片段实验现象本文中使用的测试工程 FreeRTOS学习第6篇–任务状态挂起恢复删除等操作 本文目标:学习与使用FreeRTOS中的几项操作,有挂起恢复删除等操作…

目录

  • FreeRTOS学习第6篇--任务状态挂起恢复删除等操作
    • 任务的状态
    • 设计实验
    • IRReceiver_Task任务相关代码片段
    • 实验现象
    • 本文中使用的测试工程

FreeRTOS学习第6篇–任务状态挂起恢复删除等操作

本文目标:学习与使用FreeRTOS中的几项操作,有挂起恢复删除等操作。

按照本文的描述,应该可以跑通实验并举一反三。

本文实验条件:拥有C语言基础,装有编译和集成的开发环境,比如:Keil uVision5

任务的状态

任务的状态

  • 就绪态(Ready):任务已经准备好运行,只等待调度器分配CPU时间片给它。就绪态的任务按照优先级排列在就绪列表中,优先级越高的任务越靠前。
  • 运行态(Running):任务正在执行,占用CPU资源。同一时刻,只有一个任务处于运行态,除非使用多核处理器。
  • 阻塞态(Blocked):任务因为等待某个事件(如信号量、队列、延时等)而无法运行,被放入阻塞列表中。阻塞态的任务不会占用CPU资源,也不会参与调度。当等待的事件发生时,任务会从阻塞列表中移出,重新进入就绪列表,等待调度。比如:使用函数vTaskDelay()或vTaskDelayUntil()就是进入阻塞状态,或者xSemaphoreTake()等函数也是进阻塞状态。
  • 挂起态(Suspended):任务被主动暂停,无论是否有事件发生,都不会运行,被放入挂起列表中。挂起态的任务不会占用CPU资源,也不会参与调度。只有当任务被主动恢复时,才会从挂起列表中移出,重新进入就绪列表,等待调度。比如:直接调用vTaskSuspend()函数。
  • 删除态:任务被主动删除,不再存在于任何列表中,也不会再运行。删除态的任务的内存资源会被释放,不会占用任何资源。

设计实验

本次实验就是设计一个实验,来实现任务的一些操作,有删除任务,恢复任务。在本次实验中,将使用两个按键,一个按键用作删除任务,一个按键用作挂起和恢复。基于这个实验情况,我在我的硬件平台进行实验。

IRReceiver_Task任务相关代码片段

void IRReceiver_Task(void * pvParameters)
{int bRunning;uint8_t dev, data;OLED_Init();IRReceiver_Init();while(1){OLED_ShowString(0,0,"IR Receiver: ",16);OLED_ShowString(0,16,"Device  Data",16);if (!IRReceiver_Read(&dev, &data)){OLED_ShowString(0, 32, "                ",16);OLED_ShowNum(0,32,dev,4,16);OLED_ShowNum(64,32,data,4,16);OLED_ShowString(0, 48, "                ",16);OLED_ShowString(0,48,"Key name: ",16);OLED_ShowString(80,48,(u8 *)IRReceiver_CodeToString(data),16);// 某个按键值  "1"  if(data == 48){// 创建闪灯任务if( ledTaskHandle == NULL){ledTaskHandle = osThreadNew(LedTask, NULL, &ledTask_attributes);bRunning = 1;}else{/* 要么suspend要么resume */if (bRunning){vTaskSuspend(ledTaskHandle);  // 挂起LED任务bRunning = 0;}else{vTaskResume(ledTaskHandle);   // 恢复LED任务bRunning = 1;}}}// 某个按键 "2"if(data == 24) {// 删除LED 任务if(ledTaskHandle != NULL){vTaskDelete(ledTaskHandle);ledTaskHandle = NULL;  // 进行清理操作,否则会莫名奇妙的进入HardFault_Handler错误}}}OLED_Refresh(); // 刷新屏幕}}
xTaskCreate( IRReceiver_Task, "IRReceiver_Task", configMINIMAL_STACK_SIZE, NULL, osPriorityNormal, NULL );
osThreadId_t ledTaskHandle;
const osThreadAttr_t ledTask_attributes = {.name = "ledTask",.stack_size = 128 * 4,.priority = (osPriority_t) osPriorityNormal,
};
void LedTask(void *argument)
{/* USER CODE BEGIN StartDefaultTask *//* Infinite loop */for(;;){HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);mdelay(100);}/* USER CODE END StartDefaultTask */
}

实验现象

下载代码到板子上,当我按下1号按钮时,会创建LedTask的任务,当我继续按下1号按钮时,会把LedTask进行挂起或恢复,如果是挂起的状态则进行恢复,如果是恢复的状态则进行挂起,当我按下2号按钮时会把LedTask的任务进行删除,通过这些代码片段就实现了我们本次设计的实验,完美的实现了挂起恢复删除等操作。

本文中使用的测试工程

http://www.dinnco.com/news/80779.html

相关文章:

  • 科技资讯网站有哪些推广网站制作
  • 人力社保网站建设的意义百度竞价广告点击器
  • wordpress博客建站教程做网站的好处
  • 网页微信版的手机登录温州seo品牌优化软件
  • 河南郑州做网站汉狮巩义网络推广外包
  • 惠州手机模板建站关键词竞价排名是什么意思
  • 微信做公司网站怎么做高明搜索seo
  • 济宁网站开发公司竞价推广的企业
  • 网站建设 好的公司seo优化自学
  • 唐山网站建设唐山google chrome
  • 盐城网站建设公司网店seo排名优化
  • 怎么用自己电脑做网站服务器搜索引擎seo推广
  • 怎样在网站做视频链接百度客服电话人工服务
  • 网站开发思维导图搜索引擎排名规则
  • 网站备案名称盘多多网盘资源库
  • 苏州建站模板展示网络推广外包一年多少钱
  • 住房和城乡建设部的叉车证能用吗广州seo代理
  • 美橙西安网站备案拍照谷歌商店下载不了软件
  • 网站开发前期调研百度一下首页极简版
  • 做网站的html代码格式网上推广渠道有哪些
  • 博野网站建设百度识图以图搜图
  • 江门论坛建站模板哪些平台可以发布软文
  • 郑州网站建设设计公司百度如何搜索关键词
  • 建设雅马哈摩托车官方网站网站建设的系统流程图
  • 设计师招聘网站创建网址快捷方式
  • 虚拟网站仿制教程网络推广方法有几种
  • 支付宝网站开发文档合肥网站优化搜索
  • iis6 网站无法访问广东深圳龙华区
  • 湘潭网站建设 尖端磐石网络seo类目链接优化
  • 蓟门桥网站建设武汉seo计费管理