459|3

24

帖子

0

资源

一粒金砂(中级)

AT32F425-测评报告-FreeRTOS_08 [复制链接]

本帖最后由 维尔瓦 于 2022-5-4 14:50 编辑

简述

本系列是基于雅特力-AT32F425R8T7-7开发板的测评报

 

例程位置:

image.png

 

  例程功能分析:

image.png   image.png

image.png  

从源码中可以看到,该例程主要创建了两个线程。

线程1: led2_task_function     //让LED2翻转

线程2:led3_task_function  //让LED3翻转

 

image.png   开启线程调度

 

我们在原有例程上稍加改动

image.png

在两个线程的执行函数中添加串口打印  

NOTE: 注意例子中使用的是串口1

 

然后编译下载

插上USB-TTL连接到电脑 image.png

打开设备管理器,查看串口对应的端口

image.png  

随便打开一个串口助手

image.png  

可以看到板子发送上来的数据,而且板子上的LED也会闪烁,说明两个线程都在正常运行着。 

 

那么我们可以照葫芦画瓢自己来写一个线程,感受FreeRTOS的线程创建过程

## 1. 申明线程句柄变量和线程处理函数

image.png

## 2. 初始化LED4

image.png

## 3. 创建线程

image.png   

## 4. 定义线程函数实体

image.png  
 

 ## 5. 观察现象

image.png  

7686908813a73ecd04a484a51d918a5.jpg

通过串口助手可以看到线程4成功创建且线程函数也在正常运行,板子上的LED4也跟着闪烁 

 

最后贴上我的测试代码

/**
  **************************************************************************
  * @File     main.c
  * @version  v2.0.1
  * @date     2022-02-11
  * @brief    main program
  **************************************************************************
  *                       Copyright notice & Disclaimer
  *
  * The software Board Support Package (BSP) that is made available to 
  * download from Artery official website is the copyrighted work of Artery. 
  * Artery authorizes customers to use, copy, and distribute the BSP 
  * software and its related documentation for the purpose of design and 
  * development in conjunction with Artery microcontrollers. Use of the 
  * software is governed by this copyright notice and the following disclaimer.
  *
  * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,
  * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,
  * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR
  * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,
  * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
  *
  **************************************************************************
  */

#include "at32f425_board.h"
#include "at32f425_clock.h"
#include "FreeRTOS.h"
#include "task.h"

/** @addtogroup UTILITIES_examples
  * @{
  */
  
/** @addtogroup FreeRTOS_demo
  * @{
  */
TaskHandle_t led2_handler;
TaskHandle_t led3_handler;
TaskHandle_t led4_handler;

/* led2 task */
void led2_task_function(void *pvParameters);
/* led3 task */
void led3_task_function(void *pvParameters);
/* led3 task */
void led4_task_function_ourself(void *pvParameters);
/**
  * @brief  main function.
  * @param  none
  * @retval none
  */
int main(void)
{
  nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
  
  system_clock_config();
  
  /* init led2 and led3 */
  at32_led_init(LED2);
  at32_led_init(LED3);
  at32_led_init(LED4);
  
  /* init usart1 */
  uart_print_init(115200);
  
  /* enter critical */
  taskENTER_CRITICAL(); 

  /* create led2 task */
  if(xTaskCreate((TaskFunction_t )led2_task_function,     
                 (const char*    )"LED2_task",   
                 (uint16_t       )512, 
                 (void*          )NULL,
                 (UBaseType_t    )2,
                 (TaskHandle_t*  )&led2_handler) != pdPASS)
  {
    printf("LED2 task could not be created as there was insufficient heap memory remaining.\r\n");
  }        
  else
  {
    printf("LED2 task was created successfully.\r\n");
  }
  /* create led3 task */
  if(xTaskCreate((TaskFunction_t )led3_task_function,     
                 (const char*    )"LED3_task",   
                 (uint16_t       )512, 
                 (void*          )NULL,
                 (UBaseType_t    )2,
                 (TaskHandle_t*  )&led3_handler) != pdPASS) 
  {
    printf("LED3 task could not be created as there was insufficient heap memory remaining.\r\n");
  }
  else
  {
    printf("LED3 task was created successfully.\r\n");
  }
  
  
  
  /* create led4 task */
  if(xTaskCreate((TaskFunction_t )led4_task_function_ourself,     
                 (const char*    )"LED4_task_ourself",   
                 (uint16_t       )512, 
                 (void*          )NULL,
                 (UBaseType_t    )3,
                 (TaskHandle_t*  )&led4_handler) != pdPASS) 
  {
    printf("LED4 task could not be created as there was insufficient heap memory remaining.\r\n");
  }
  else
  {
    printf("LED4 task was created successfully.\r\n");
  }
 
  /* exit critical */            
  taskEXIT_CRITICAL();      
              
  /* start scheduler */            
  vTaskStartScheduler(); 
}

/* led2 task function */
void led2_task_function(void *pvParameters)
{
  while(1)
  {
    at32_led_toggle(LED2);
	  printf("at32_led_toggle(LED2)\n");
    vTaskDelay(1000);
  }
}

/* led3 task function */
void led3_task_function(void *pvParameters)
{
  while(1)
  {
    at32_led_toggle(LED3);
	  printf("at32_led_toggle(LED3)\n");
    vTaskDelay(500);
  }
}

/* led4 task function */
void led4_task_function_ourself(void *pvParameters)
{
  while(1)
  {
    at32_led_toggle(LED4);
	  printf("at32_led_toggle(LED4)\n");
    vTaskDelay(500);
  }
}

/**
  * @}
  */ 

/**
  * @}
  */ 

 

 

 


回复

1454

帖子

3

资源

版主

有系统使用起来就是方便吧。

点评

是的,多线程用起来就是爽  详情 回复 发表于 2022-5-6 08:26

回复

24

帖子

0

资源

一粒金砂(中级)

lugl4313820 发表于 2022-5-4 15:18 有系统使用起来就是方便吧。

是的,多线程用起来就是爽

点评

同步比较麻烦。  详情 回复 发表于 2022-5-7 16:07

回复

5390

帖子

18

资源

五彩晶圆(中级)

维尔瓦 发表于 2022-5-6 08:26 是的,多线程用起来就是爽

同步比较麻烦。

个人签名

默认摸鱼


回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    推荐帖子
    运放8坑

    引言 算放大器最初诞生时是用来作为各种模拟信号的运算,这个名字后来一直沿用至今,但是现在已经不仅仅是所谓的“运算”了,如 ...

    VAS5175A_VAS5176锂电充电管理IC应用参数

    VAS5175A_VAS5176锂电充电管理IC应用参数设置 1. 电感选择:电感功率是输入电流的1.5倍以上,最好2倍以上。 2. 限流电阻:12 ...

    RFID(射频识别技术)的应用架构规划指南

    从EPCGlobal所倡导的物联网这一宏图伟业开始,结合作者参与一些RFID试点工程的切身体会,着重探讨一个典型RFID应用系统所应具备 ...

    STM32H743开发板移植micropython并外扩32M的SQPI flash和32M的SDRAM

    本帖最后由 异想天开168 于 2020-6-12 11:32 编辑   自从去年接触到micropython后就痴迷上了它,因为它能够将python代码在 ...

    FPGA的时钟质量对设计的影响

    FPGA的时钟质量对设计的影响

    【测评SGP40】快速部署实现的人工智能环境空气质量跟踪模型 #1 开箱介绍

    1、本次评测的主要内容 因为SGP40是高精度,低功耗VOC挥发性空气污染指数监测传感器,有16位的数字采样精度。 监测环境,提 ...

    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表