stn32开发之threadx使用记录(一)

前言

  1. 先让threadx在板子上跑起来再说;
  2. 使用的芯片stm32f407zgt6
  3. 开发环境使用的是clion+cubemx
  4. 编译使用的是arm-none-gcc

实现效果

  1. 定时打印输出
  2. 添加threadx的cpu扩展工具,打印threadx任务相关信息

测试代码

相关宏定义

#define TX_CONV_STACK_SIZE(size) ((((UINT) size)+((sizeof(ULONG)) - ((UINT) 1)))/sizeof(ULONG))

main入口函数

/*
 * Copyright (c) 2024-2024,shchl
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2024-4-4     shchl   first version
 */
#include "includes.h"

int main() {
   
   
    /*系统初始化*/
    System_Init();
    /*外设初始化*/
    bsp_Init();
    /*进入threadx 内核*/
    tx_kernel_enter();
    while (1) {
   
   

        printf("app run\r\n");
        HAL_Delay(1000);
    }
    return 0;
}

threadx 切入点函数(这里使用了tx里面的一个宏定义去初始化通信变量)

在这里插入图片描述

/*
 * Copyright (c) 2024-2024,shchl
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2024-4-4     shchl   first version
 *
 *
 * tx_kernel_enter() 执行逻辑(关键)
 *   TX_PORT_SPECIFIC_PRE_INITIALIZATION----可扩展
 *    _tx_initialize_low_level() --- 设备层(寄存器)初始化
 *    _tx_initialize_high_level() --- tx os 内部相关初始化
 *   TX_INITIALIZE_KERNEL_ENTER_EXTENSION----可扩展
 *     tx_application_define(_tx_initialize_unused_memory);
 *   TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION ---可扩展
 *
 */
#include "includes.h"
//#define USE_THREADX_BYTE_POOL
//#define USE_FILEX_BYTE_POOL
//#define USE_FILEX_BYTE_POOL


/*
*******************************************************************************************************
*                               外部引入变量
*******************************************************************************************************
*/

/*
*******************************************************************************************************
*                               变量
*******************************************************************************************************
*/
TX_MUTEX AppPrintfSemp;    /* 用于printf互斥 */
/*
*********************************************************************************************************
*                                       静态全局变量
*********************************************************************************************************
*/
#ifdef  USE_THREADX_BYTE_POOL
/* USER CODE BEGIN TX_Pool_Buffer */
/* USER CODE END TX_Pool_Buffer */
static UCHAR tx_byte_pool_buffer[TX_APP_MEM_POOL_SIZE];
static TX_BYTE_POOL tx_app_byte_pool;
#endif
#ifdef  USE_FILEX_BYTE_POOL
/* USER CODE BEGIN FX_Pool_Buffer */
/* USER CODE END FX_Pool_Buffer */
static UCHAR fx_byte_pool_buffer[FX_APP_MEM_POOL_SIZE];
static TX_BYTE_POOL fx_app_byte_pool;
#endif
#ifdef  USE_FILEX_BYTE_POOL
/* USER CODE BEGIN NX_Pool_Buffer */
/* USER CODE END NX_Pool_Buffer */
static UCHAR nx_byte_pool_buffer[NX_APP_MEM_POOL_SIZE];
static TX_BYTE_POOL nx_app_byte_pool;
#endif
/*
*********************************************************************************************************
*                                      函数声明
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                      外部函数
*********************************************************************************************************
*/
/**
 * @brief 此函数 被宏定义 TX_INITIALIZE_KERNEL_ENTER_EXTENSION 引用
 */
void tx_initialize_kernel_enter_extension() {
   
   
    /* 创建互斥信号量 */
    tx_mutex_create(&AppPrintfSemp, "AppPrintfSemp", TX_NO_INHERIT);
}

/**
  * @brief  应用组件定义初始化
  * @param  first_unused_memory : Pointer to the first unused memory
  * @retval None
  */
VOID tx_application_define(VOID *first_unused_memory) {
   
   

    (void *) first_unused_memory;
    VOID *memory_ptr;

#ifdef  USE_THREADX_BYTE_POOL
    if (tx_byte_pool_create(&tx_app_byte_pool, "Tx App memory pool", tx_byte_pool_buffer, TX_APP_MEM_POOL_SIZE) !=
        TX_SUCCESS) {
   
   
        /* USER CODE BEGIN TX_Byte_Pool_Error */

        /* USER CODE END TX_Byte_Pool_Error */
    } else {
   
   
        /* USER CODE BEGIN TX_Byte_Pool_Success */

        /* USER CODE END TX_Byte_Pool_Success */

        memory_ptr = (VOID *) &tx_app_byte_pool;

        if (App_ThreadX_Init(memory_ptr) != TX_SUCCESS) {
   
   
            /* USER CODE BEGIN  App_ThreadX_Init_Error */

            /* USER CODE END  App_ThreadX_Init_Error */
        }

        /* USER CODE BEGIN  App_ThreadX_Init_Success */

        /* USER CODE END  App_ThreadX_Init_Success */

    }
#else
    if (App_ThreadX_Init(TX_NULL) != TX_SUCCESS) {
   
   
        /* USER CODE BEGIN  App_ThreadX_Init_Error */

        /* USER CODE END  App_ThreadX_Init_Error */
    }
#endif
#ifdef  USE_FILEX_BYTE_POOL
    if (tx_byte_pool_create(&fx_app_byte_pool, "Fx App memory pool", fx_byte_pool_buffer, FX_APP_MEM_POOL_SIZE) !=
        TX_SUCCESS) {
   
   
        /* USER CODE BEGIN FX_Byte_Pool_Error */

        /* USER CODE END FX_Byte_Pool_Error */
    } else {
   
   
        /* USER CODE BEGIN FX_Byte_Pool_Success */

        /* USER CODE END FX_Byte_Pool_Success */

        memory_ptr = (VOID *) &fx_app_byte_pool;

        if (MX_FileX_Init(memory_ptr) != FX_SUCCESS) {
   
   
            /* USER CODE BEGIN MX_FileX_Init_Error */

            /* USER CODE END MX_FileX_Init_Error */
        }

        /* USER CODE BEGIN MX_FileX_Init_Success */

        /* USER CODE END MX_FileX_Init_Success */
    }
#else
//    if (MX_FileX_Init(TX_NULL) != FX_SUCCESS) {
   
   
//        /* USER CODE BEGIN MX_FileX_Init_Error */
//
//        /* USER CODE END MX_FileX_Init_Error */
//    }
#endif
#ifdef  USE_FILEX_BYTE_POOL
    if (tx_byte_pool_create(&nx_app_byte_pool, "Nx App memory pool", nx_byte_pool_buffer, NX_APP_MEM_POOL_SIZE) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

詩不诉卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值