generated from Template/H563ZI-HAL-CMake-Template
212 lines
6.1 KiB
C
212 lines
6.1 KiB
C
/* USER CODE BEGIN Header */
|
|
/**
|
|
******************************************************************************
|
|
* @file app_threadx.c
|
|
* @author MCD Application Team
|
|
* @brief ThreadX applicative file
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2025 STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file
|
|
* in the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
/* USER CODE END Header */
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "app_threadx.h"
|
|
|
|
/* Private includes ----------------------------------------------------------*/
|
|
/* USER CODE BEGIN Includes */
|
|
|
|
/* USER CODE END Includes */
|
|
|
|
/* Private typedef -----------------------------------------------------------*/
|
|
/* USER CODE BEGIN PTD */
|
|
|
|
/* USER CODE END PTD */
|
|
|
|
/* Private define ------------------------------------------------------------*/
|
|
/* USER CODE BEGIN PD */
|
|
|
|
// BLE define
|
|
#define BLE_RX_THREAD_STACK_SIZE 2048
|
|
#define BLE_RX_THREAD_PRIORITY 10
|
|
#define BLE_TX_THREAD_STACK_SIZE 2048
|
|
#define BLE_TX_THREAD_PRIORITY 10
|
|
// IMU thread config
|
|
// IMU thread config
|
|
#define IMU_ANGLE_THREAD_STACK_SIZE 1024
|
|
#define IMU_ANGLE_THREAD_PRIORITY 11
|
|
|
|
|
|
|
|
/* USER CODE END PD */
|
|
|
|
/* Private macro -------------------------------------------------------------*/
|
|
/* USER CODE BEGIN PM */
|
|
|
|
/* USER CODE END PM */
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/* USER CODE BEGIN PV */
|
|
/* ȫ<>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
TX_EVENT_FLAGS_GROUP system_events;
|
|
TX_EVENT_FLAGS_GROUP sensor_events;
|
|
MotorCommand current_motor_cmd = {0,0};
|
|
_GPSData gps_data;
|
|
|
|
// Ble thread vd
|
|
TX_THREAD ble_rx_thread;
|
|
TX_THREAD ble_tx_thread;
|
|
UCHAR ble_rx_stack[BLE_RX_THREAD_STACK_SIZE];
|
|
UCHAR ble_tx_stack[BLE_TX_THREAD_STACK_SIZE];
|
|
|
|
TX_QUEUE ble_tx_queue;
|
|
#define BLE_TX_QUEUE_LEN 10
|
|
//ULONG ble_tx_queue_buffer[BLE_TX_QUEUE_LEN]; // 一定要是ULONG类型 之前使用的是BLE_Message
|
|
|
|
#define BLE_TX_MSG_LEN 64
|
|
#define BLE_TX_QUEUE_LEN 10
|
|
|
|
__attribute__((aligned(4)))
|
|
ULONG ble_tx_queue_buffer[BLE_TX_QUEUE_LEN * ((BLE_TX_MSG_LEN + sizeof(ULONG) - 1) / sizeof(ULONG))];
|
|
|
|
// imu
|
|
TX_THREAD imu_angle_thread;
|
|
UCHAR imu_angle_stack[IMU_ANGLE_THREAD_STACK_SIZE];
|
|
|
|
#define IM948_RX_QUEUE_SIZE 64
|
|
ULONG im948_rx_queue_buffer[IM948_RX_QUEUE_SIZE];
|
|
TX_QUEUE im948_uart_rx_queue;
|
|
/* USER CODE END PV */
|
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
/* USER CODE BEGIN PFP */
|
|
#define GPS_TASK_STACK_SIZE 2048
|
|
#define GPS_TASK_PRIORITY 11
|
|
|
|
TX_THREAD gps_task;
|
|
ULONG gps_task_stack[GPS_TASK_STACK_SIZE / sizeof(ULONG)];
|
|
|
|
/* USER CODE END 1 */
|
|
/* USER CODE END 1 */
|
|
|
|
/* USER CODE END PFP */
|
|
|
|
/**
|
|
* @brief Application ThreadX Initialization.
|
|
* @param memory_ptr: memory pointer
|
|
* @retval int
|
|
*/
|
|
UINT App_ThreadX_Init(VOID *memory_ptr)
|
|
{
|
|
HCBle_SendData("进入 App_ThreadX_Init\r\n");
|
|
// HCBle_SendData("%d",sizeof(ULONG));
|
|
UINT status;
|
|
|
|
// === 创建 BLE RX 线程 ===
|
|
status = tx_thread_create(&ble_rx_thread, "BLE RX Thread",
|
|
ble_rx_task_entry, 0,
|
|
ble_rx_stack, BLE_RX_THREAD_STACK_SIZE,
|
|
BLE_RX_THREAD_PRIORITY, BLE_RX_THREAD_PRIORITY,
|
|
TX_NO_TIME_SLICE, TX_AUTO_START);
|
|
|
|
if(status != TX_SUCCESS)
|
|
{
|
|
return status;
|
|
}
|
|
|
|
// === 创建 BLE TX 线程 ===
|
|
status = tx_thread_create(&ble_tx_thread, "BLE TX Thread",
|
|
ble_tx_task_entry, 0,
|
|
ble_tx_stack, BLE_TX_THREAD_STACK_SIZE,
|
|
BLE_TX_THREAD_PRIORITY, BLE_TX_THREAD_PRIORITY,
|
|
TX_NO_TIME_SLICE, TX_AUTO_START);
|
|
|
|
if (status != TX_SUCCESS) {
|
|
HCBle_SendData("❌ BLE TX 线程创建失败,错误码=%d\r\n", status);
|
|
return status;
|
|
}
|
|
|
|
// === 创建 BLE TX 消息队列 ===
|
|
status = tx_queue_create(&ble_tx_queue, "BLE TX Queue",
|
|
(BLE_TX_MSG_LEN + sizeof(ULONG) - 1) / sizeof(ULONG),
|
|
ble_tx_queue_buffer,
|
|
sizeof(ble_tx_queue_buffer));
|
|
|
|
|
|
if (status != TX_SUCCESS) {
|
|
HCBle_SendData("❌ BLE TX 消息队列创建失败,错误码=%d\r\n", status);
|
|
return status;
|
|
}
|
|
|
|
status = tx_thread_create(&imu_angle_thread, "IMU Angle Thread",
|
|
imu_angle_ble_task_entry, 0,
|
|
imu_angle_stack, IMU_ANGLE_THREAD_STACK_SIZE,
|
|
IMU_ANGLE_THREAD_PRIORITY, IMU_ANGLE_THREAD_PRIORITY,
|
|
TX_NO_TIME_SLICE, TX_AUTO_START);
|
|
|
|
if (status != TX_SUCCESS) {
|
|
return status;
|
|
}
|
|
|
|
|
|
status = tx_queue_create(&im948_uart_rx_queue, "IM948_RX_QUEUE",
|
|
TX_1_ULONG, // sizeof(ULONG) bytes per entry
|
|
im948_rx_queue_buffer,
|
|
IM948_RX_QUEUE_SIZE * sizeof(ULONG));
|
|
if(status != TX_SUCCESS)
|
|
{
|
|
return status;
|
|
}
|
|
|
|
status = tx_thread_create(&gps_task,
|
|
"GPS Task",
|
|
gps_thread_entry,
|
|
0,
|
|
gps_task_stack,
|
|
GPS_TASK_STACK_SIZE,
|
|
GPS_TASK_PRIORITY,
|
|
GPS_TASK_PRIORITY,
|
|
TX_NO_TIME_SLICE,
|
|
TX_AUTO_START);
|
|
|
|
if(status != TX_SUCCESS)
|
|
{
|
|
return status;
|
|
}
|
|
HCBle_SendData("✅ BLE RX/TX 线程和队列初始化完成\r\n");
|
|
|
|
return TX_SUCCESS;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Function that implements the kernel's initialization.
|
|
* @param None
|
|
* @retval None
|
|
*/
|
|
void MX_ThreadX_Init(void)
|
|
{
|
|
/* USER CODE BEGIN Before_Kernel_Start */
|
|
HCBle_InitEventFlags(); // 这必须在任何使用前调用一次
|
|
/* USER CODE END Before_Kernel_Start */
|
|
tx_kernel_enter();
|
|
|
|
/* USER CODE BEGIN Kernel_Start_Error */
|
|
|
|
/* USER CODE END Kernel_Start_Error */
|
|
}
|
|
|
|
/* USER CODE BEGIN 1 */
|
|
|
|
|
|
/* USER CODE END 1 */
|