• STM32CubeIDE+FreeRTOS任务管理实验


    新建工程RTOS_Task,配置如下:

    Ctrl + S生成代码

    修改代码,

    1,在main.h中添加

    //添加include
    /* Private includes ----------------------------------------------------------*/
    /* USER CODE BEGIN Includes */
    #include "stdio.h"
    /* USER CODE END Includes */

    2,在main.c中添加

    //添加_write函数重定义
    /* USER CODE BEGIN PFP */
    int _write(int file , char *ptr,int len)
    {
        int i = 0;
        for(i = 0;i<len;i++)
            ITM_SendChar((*ptr++));
        return len;
    }
    /* USER CODE END PFP */
    ...
    ...
    ...
    /* USER CODE BEGIN 2 */
    printf("starting...
    ");
    /* USER CODE END 2 */

    3,在main.c中修改3个任务入口函数的内容

    /* USER CODE BEGIN Header_StartDefaultTask */
    /**
      * @brief  Function implementing the defaultTask thread.
      * @param  argument: Not used 
      * @retval None
      */
    /* USER CODE END Header_StartDefaultTask */
    void StartDefaultTask(void const * argument)
    {
      /* USER CODE BEGIN 5 */
        int timeCount = 0;
      /* Infinite loop */
      for(;;)
      {
        printf("DefaultTask----time   %d
    ",timeCount++);
        osDelay(1000);
      }
      /* USER CODE END 5 */ 
    }
    /* USER CODE BEGIN Header_StartTask02 */
    /**
    * @brief Function implementing the myTask02 thread.
    * @param argument: Not used
    * @retval None
    */
    /* USER CODE END Header_StartTask02 */
    void StartTask02(void const * argument)
    {
      /* USER CODE BEGIN StartTask02 */
        int times = 0;
      /* Infinite loop */
      for(;;)
      {
        printf("Task02----times   %d
    ",times++);
        osDelay(1000);
      }
      /* USER CODE END StartTask02 */
    }
    /* USER CODE BEGIN Header_StartTask03 */
    /**
    * @brief Function implementing the myTask03 thread.
    * @param argument: Not used
    * @retval None
    */
    /* USER CODE END Header_StartTask03 */
    void StartTask03(void const * argument)
    {
      /* USER CODE BEGIN StartTask03 */
      /* Infinite loop */
      for(;;)
      {
        osDelay(3000);//等待3秒
    
        osThreadSuspend(myTask02Handle);//挂起线程Task02
    
        osDelay(3000);//等待3秒
    
        osThreadResume(myTask02Handle);//恢复线程Task02
      }
      /* USER CODE END StartTask03 */
    }

    修改完毕后点击 小锤子 构建工程,然后点击Debug,按如下步骤配置ITM调试

     

     全速运行之前一定要先点击SWV ITM data Console 页面中的红色圆圈

     现象:

     分析:

    DefaultTask 负责每秒输出一个当前的时间信息,表示此时时间为第几秒

    Task02每秒输出一次,表示此次为第几次输出。

    Task03等待3秒挂起Task02,在等待3秒回复Task02.

    程序刚运行时,DefaultTask 和 Task02同频率输出,3秒钟之后DefaultTask继续输出,而Task02不再输出。

    再等待3秒,Task03将Task02 恢复,Task02 继续输出,如此循环。

    此次实现了任务的挂起与恢复。

  • 相关阅读:
    WinService12r2系统加固-3389端口与端口安全
    WinService12r2系统加固-账户管理与服务安全
    渗透测试常用工具-stunnel内网穿透
    渗透测试常用工具-ptunnel内网穿透
    报错注入函数
    常见绕过disable_function(抄录)linux系统。windows系统大概只有com组件
    nmap(抄录)
    php回调木马
    NoSql注入小测试。
    日志:记一次网页篡改(从开始到质保)一个渗透工作者的工作之路
  • 原文地址:https://www.cnblogs.com/tianxxl/p/12017875.html
Copyright © 2020-2023  润新知