当前位置: 首页 > 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.yayakq.cn/news/253498/

相关文章:

  • 青岛网站开发公司电话宁波 seo排名公司
  • 做自媒体常用的图片网站建网站服务器用哪种
  • 万网做网站给网站源码做艺术字的网站
  • 深圳市网站建设制作设计平台有侧边栏的网站
  • 网站浮动qqacfun网站设计改进
  • 长春哪家做网站做的好庐山市星子网
  • 合肥百姓网网站建设网站工作室 需要什么手续
  • 互联网网站开发用哪个语言开发外贸企业邮箱哪家好
  • 淘宝网站建设百度百科网站ip地址范围
  • 网站专业优化在线做网页的网站
  • 广州网页设计网站wordpress古腾堡编辑器如何使用
  • 迈诺网站建设pc网站自动转换wap网站
  • 基本的网站开发技术路线word如何做网站
  • 廉政建设网评文章网站做网站每个月可以赚多少钱
  • 古装衣服店网站建设页面写app程序用什么软件
  • 网站设计一级网页请seo的人帮做网站排名
  • 卡片式设计网站制作做货源网站可以赚钱吗
  • 沛县网站开发华强北商城官网app
  • 网站搜索优化找哪家wordpress忘记密码ftp
  • 建网站哪家好北京品牌型网站开发
  • 服装设计网站哪个好可以做硬件外包项目的网站
  • 网站广告条幅怎么做动态的做门户网站都需要干什么
  • 网站优化推广seo太原建网站公司
  • 做mla网站网站空间最便宜
  • 网站专业是学什么wordpress只在首页显示不出来
  • 河北建设厅网站修改密码在哪凡科建站是不是关闭企业网站
  • 建好网站是不是每年都要交钱简要说明网站建设的基本流程
  • 医疗保险网站开通建设wordpress安全登录插件下载失败
  • 网站英语培训班哪个机构好上海搬家公司哪家便宜
  • 联想网站建设预算报告书网站域名费用