24 changed files with 593 additions and 380 deletions
-
35.cproject
-
42.mxproject
-
4.settings/stm32cubeide.project.prefs
-
30Core/Inc/FreeRTOSConfig.h
-
76Core/Inc/stm32f4xx_hal_conf.h
-
88Core/Src/freertos.c
-
256Core/Src/usart.c.bak
-
2Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c
-
2Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.h
-
2STM32F407VETX_FLASH.ld
-
2a8000_protocol
-
6a8000_subboard.ioc
-
2sdk
-
6usrc/main.cpp
-
3usrc/project_configs.h
-
9usrc/public_service/gins.c
-
7usrc/public_service/gins.h
-
7usrc/public_service/stm32irq.c
-
21usrc/subboards/subboard30_shake_module/pri_board.h
-
89usrc/subboards/subboard30_shake_module/subboard30_shake_module.cpp
-
73usrc/subboards/subboard30_shake_module/subboard30_shake_module_board.c
-
21usrc/subboards/subboard30_shake_module/subboard30_shake_module_board.h
-
135usrc/sysmgr/sys_mgr.cpp
-
49usrc/sysmgr/sys_mgr.hpp
42
.mxproject
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1,6 +1,6 @@ |
|||
2F62501ED4689FB349E356AB974DBE57=E20EF8A1CFA8D2AA5E7713614514A9E1 |
|||
2F62501ED4689FB349E356AB974DBE57=04980315A9C90A386CC08C1FEA19B581 |
|||
635E684B79701B039C64EA45C3F84D30=C8B026EBE17C208F17FB66CE4235156C |
|||
66BE74F758C12D739921AEA421D593D3=1 |
|||
8DF89ED150041C4CBC7CB9A9CAA90856=E20EF8A1CFA8D2AA5E7713614514A9E1 |
|||
8DF89ED150041C4CBC7CB9A9CAA90856=04980315A9C90A386CC08C1FEA19B581 |
|||
DC22A860405A8BF2F2C095E5B6529F12=EC6C4D369FD4F7EABFE17B3222B5F3A0 |
|||
eclipse.preferences.version=1 |
@ -1,256 +0,0 @@ |
|||
/* USER CODE BEGIN Header */ |
|||
/** |
|||
****************************************************************************** |
|||
* @file usart.c |
|||
* @brief This file provides code for the configuration |
|||
* of the USART instances. |
|||
****************************************************************************** |
|||
* @attention |
|||
* |
|||
* Copyright (c) 2023 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 "usart.h" |
|||
|
|||
/* USER CODE BEGIN 0 */ |
|||
|
|||
/* USER CODE END 0 */ |
|||
|
|||
UART_HandleTypeDef huart1; |
|||
UART_HandleTypeDef huart3; |
|||
DMA_HandleTypeDef hdma_usart1_rx; |
|||
DMA_HandleTypeDef hdma_usart3_rx; |
|||
DMA_HandleTypeDef hdma_usart3_tx; |
|||
|
|||
/* USART1 init function */ |
|||
|
|||
void MX_USART1_UART_Init(void) |
|||
{ |
|||
|
|||
/* USER CODE BEGIN USART1_Init 0 */ |
|||
|
|||
/* USER CODE END USART1_Init 0 */ |
|||
|
|||
/* USER CODE BEGIN USART1_Init 1 */ |
|||
|
|||
/* USER CODE END USART1_Init 1 */ |
|||
huart1.Instance = USART1; |
|||
huart1.Init.BaudRate = 460800; |
|||
huart1.Init.WordLength = UART_WORDLENGTH_8B; |
|||
huart1.Init.StopBits = UART_STOPBITS_1; |
|||
huart1.Init.Parity = UART_PARITY_NONE; |
|||
huart1.Init.Mode = UART_MODE_TX_RX; |
|||
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
|||
huart1.Init.OverSampling = UART_OVERSAMPLING_16; |
|||
if (HAL_UART_Init(&huart1) != HAL_OK) |
|||
{ |
|||
Error_Handler(); |
|||
} |
|||
/* USER CODE BEGIN USART1_Init 2 */ |
|||
|
|||
/* USER CODE END USART1_Init 2 */ |
|||
|
|||
} |
|||
/* USART3 init function */ |
|||
|
|||
void MX_USART3_UART_Init(void) |
|||
{ |
|||
|
|||
/* USER CODE BEGIN USART3_Init 0 */ |
|||
|
|||
/* USER CODE END USART3_Init 0 */ |
|||
|
|||
/* USER CODE BEGIN USART3_Init 1 */ |
|||
|
|||
/* USER CODE END USART3_Init 1 */ |
|||
huart3.Instance = USART3; |
|||
huart3.Init.BaudRate = 1000000; |
|||
huart3.Init.WordLength = UART_WORDLENGTH_8B; |
|||
huart3.Init.StopBits = UART_STOPBITS_1; |
|||
huart3.Init.Parity = UART_PARITY_NONE; |
|||
huart3.Init.Mode = UART_MODE_TX_RX; |
|||
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
|||
huart3.Init.OverSampling = UART_OVERSAMPLING_16; |
|||
if (HAL_UART_Init(&huart3) != HAL_OK) |
|||
{ |
|||
Error_Handler(); |
|||
} |
|||
/* USER CODE BEGIN USART3_Init 2 */ |
|||
|
|||
/* USER CODE END USART3_Init 2 */ |
|||
|
|||
} |
|||
|
|||
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) |
|||
{ |
|||
|
|||
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
|||
if(uartHandle->Instance==USART1) |
|||
{ |
|||
/* USER CODE BEGIN USART1_MspInit 0 */ |
|||
|
|||
/* USER CODE END USART1_MspInit 0 */ |
|||
/* USART1 clock enable */ |
|||
__HAL_RCC_USART1_CLK_ENABLE(); |
|||
|
|||
__HAL_RCC_GPIOA_CLK_ENABLE(); |
|||
/**USART1 GPIO Configuration |
|||
PA9 ------> USART1_TX |
|||
PA10 ------> USART1_RX |
|||
*/ |
|||
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; |
|||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
|||
GPIO_InitStruct.Alternate = GPIO_AF7_USART1; |
|||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); |
|||
|
|||
/* USART1 DMA Init */ |
|||
/* USART1_RX Init */ |
|||
hdma_usart1_rx.Instance = DMA2_Stream2; |
|||
hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4; |
|||
hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; |
|||
hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE; |
|||
hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; |
|||
hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; |
|||
hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; |
|||
hdma_usart1_rx.Init.Mode = DMA_NORMAL; |
|||
hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW; |
|||
hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; |
|||
if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK) |
|||
{ |
|||
Error_Handler(); |
|||
} |
|||
|
|||
__HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx); |
|||
|
|||
/* USART1 interrupt Init */ |
|||
HAL_NVIC_SetPriority(USART1_IRQn, 5, 0); |
|||
HAL_NVIC_EnableIRQ(USART1_IRQn); |
|||
/* USER CODE BEGIN USART1_MspInit 1 */ |
|||
|
|||
/* USER CODE END USART1_MspInit 1 */ |
|||
} |
|||
else if(uartHandle->Instance==USART3) |
|||
{ |
|||
/* USER CODE BEGIN USART3_MspInit 0 */ |
|||
|
|||
/* USER CODE END USART3_MspInit 0 */ |
|||
/* USART3 clock enable */ |
|||
__HAL_RCC_USART3_CLK_ENABLE(); |
|||
|
|||
__HAL_RCC_GPIOB_CLK_ENABLE(); |
|||
/**USART3 GPIO Configuration |
|||
PB10 ------> USART3_TX |
|||
PB11 ------> USART3_RX |
|||
*/ |
|||
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11; |
|||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|||
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
|||
GPIO_InitStruct.Alternate = GPIO_AF7_USART3; |
|||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |
|||
|
|||
/* USART3 DMA Init */ |
|||
/* USART3_RX Init */ |
|||
hdma_usart3_rx.Instance = DMA1_Stream1; |
|||
hdma_usart3_rx.Init.Channel = DMA_CHANNEL_4; |
|||
hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; |
|||
hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE; |
|||
hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE; |
|||
hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; |
|||
hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; |
|||
hdma_usart3_rx.Init.Mode = DMA_NORMAL; |
|||
hdma_usart3_rx.Init.Priority = DMA_PRIORITY_LOW; |
|||
hdma_usart3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; |
|||
if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK) |
|||
{ |
|||
Error_Handler(); |
|||
} |
|||
|
|||
__HAL_LINKDMA(uartHandle,hdmarx,hdma_usart3_rx); |
|||
|
|||
/* USART3_TX Init */ |
|||
hdma_usart3_tx.Instance = DMA1_Stream3; |
|||
hdma_usart3_tx.Init.Channel = DMA_CHANNEL_4; |
|||
hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; |
|||
hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE; |
|||
hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE; |
|||
hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; |
|||
hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; |
|||
hdma_usart3_tx.Init.Mode = DMA_NORMAL; |
|||
hdma_usart3_tx.Init.Priority = DMA_PRIORITY_LOW; |
|||
hdma_usart3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; |
|||
if (HAL_DMA_Init(&hdma_usart3_tx) != HAL_OK) |
|||
{ |
|||
Error_Handler(); |
|||
} |
|||
|
|||
__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart3_tx); |
|||
|
|||
/* USER CODE BEGIN USART3_MspInit 1 */ |
|||
|
|||
/* USER CODE END USART3_MspInit 1 */ |
|||
} |
|||
} |
|||
|
|||
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) |
|||
{ |
|||
|
|||
if(uartHandle->Instance==USART1) |
|||
{ |
|||
/* USER CODE BEGIN USART1_MspDeInit 0 */ |
|||
|
|||
/* USER CODE END USART1_MspDeInit 0 */ |
|||
/* Peripheral clock disable */ |
|||
__HAL_RCC_USART1_CLK_DISABLE(); |
|||
|
|||
/**USART1 GPIO Configuration |
|||
PA9 ------> USART1_TX |
|||
PA10 ------> USART1_RX |
|||
*/ |
|||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); |
|||
|
|||
/* USART1 DMA DeInit */ |
|||
HAL_DMA_DeInit(uartHandle->hdmarx); |
|||
|
|||
/* USART1 interrupt Deinit */ |
|||
HAL_NVIC_DisableIRQ(USART1_IRQn); |
|||
/* USER CODE BEGIN USART1_MspDeInit 1 */ |
|||
|
|||
/* USER CODE END USART1_MspDeInit 1 */ |
|||
} |
|||
else if(uartHandle->Instance==USART3) |
|||
{ |
|||
/* USER CODE BEGIN USART3_MspDeInit 0 */ |
|||
|
|||
/* USER CODE END USART3_MspDeInit 0 */ |
|||
/* Peripheral clock disable */ |
|||
__HAL_RCC_USART3_CLK_DISABLE(); |
|||
|
|||
/**USART3 GPIO Configuration |
|||
PB10 ------> USART3_TX |
|||
PB11 ------> USART3_RX |
|||
*/ |
|||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_11); |
|||
|
|||
/* USART3 DMA DeInit */ |
|||
HAL_DMA_DeInit(uartHandle->hdmarx); |
|||
HAL_DMA_DeInit(uartHandle->hdmatx); |
|||
/* USER CODE BEGIN USART3_MspDeInit 1 */ |
|||
|
|||
/* USER CODE END USART3_MspDeInit 1 */ |
|||
} |
|||
} |
|||
|
|||
/* USER CODE BEGIN 1 */ |
|||
|
|||
/* USER CODE END 1 */ |
@ -1 +1 @@ |
|||
Subproject commit 232ed7c739e2ee86fe127f6364648a0d50378391 |
|||
Subproject commit 05207cdd53d36969e7d605aa65f3fa34af819e6e |
@ -1 +1 @@ |
|||
Subproject commit faf6a7ee02b3b4d2efa1231430a64ed982ac0f84 |
|||
Subproject commit f59bc6e7b8cbaa2a0d57ec2141fa933b202eda5b |
@ -0,0 +1,21 @@ |
|||
#pragma once |
|||
|
|||
#define TMC_MOTOR_SPI hspi1 |
|||
// JL_CSN |
|||
#define MOTOR1_CSN PA4 |
|||
#define MOTOR1_ENN PE3 |
|||
#define MOTOR1_SPI_MODE_SELECT PinNull |
|||
#define MOTOR1_REFL PD13 |
|||
#define MOTOR1_REFR PD14 |
|||
// SL_CSN |
|||
#define MOTOR2_CSN PA8 |
|||
#define MOTOR2_ENN PE6 |
|||
#define MOTOR2_SPI_MODE_SELECT PinNull |
|||
#define MOTOR2_REFL PD11 |
|||
#define MOTOR2_REFR PD12 |
|||
// CL_CSN |
|||
#define MOTOR3_CSN PA15 |
|||
#define MOTOR3_ENN PE7 |
|||
#define MOTOR3_SPI_MODE_SELECT PinNull |
|||
#define MOTOR3_REFL PD9 |
|||
#define MOTOR3_REFR PD10 |
@ -0,0 +1,135 @@ |
|||
#include "sys_mgr.hpp"
|
|||
#include "sdk/os/zos.hpp"
|
|||
#include "project_configs.h"
|
|||
|
|||
#include <stdlib.h>
|
|||
#include <string.h>
|
|||
|
|||
using namespace iflytop; |
|||
|
|||
#define TAG "SysMgr"
|
|||
|
|||
|
|||
extern "C" { |
|||
|
|||
/***********************************************************************************************************************
|
|||
* STM32_CODE_ERROR * |
|||
***********************************************************************************************************************/ |
|||
void SysMgr_on_Error_Handler() { |
|||
ZLOGE(TAG, "Error_Handler\n"); |
|||
while (1) { |
|||
} |
|||
} |
|||
|
|||
void SysMgr_on_assert_failed(uint8_t* file, uint32_t line) { |
|||
ZLOGE(TAG, "ASSERT: %s [%s:%d]\n", file, line); |
|||
while (1) { |
|||
} |
|||
} |
|||
|
|||
/***********************************************************************************************************************
|
|||
* STM32_ERROR_IRQ * |
|||
***********************************************************************************************************************/ |
|||
void SysMgr_on_NMI_Handler(void) { ZLOGI(TAG, "on NMI_Handler"); } |
|||
void SysMgr_on_HardFault_Handler(void) { ZLOGI(TAG, "on HardFault_Handler"); } |
|||
void SysMgr_on_MemManage_Handler(void) { ZLOGI(TAG, "on MemManage_Handler"); } |
|||
void SysMgr_on_BusFault_Handler(void) { ZLOGI(TAG, "on BusFault_Handler"); } |
|||
void SysMgr_on_UsageFault_Handler(void) { ZLOGI(TAG, "on UsageFault_Handler"); } |
|||
|
|||
/***********************************************************************************************************************
|
|||
* FREERTOS_ERROR * |
|||
***********************************************************************************************************************/ |
|||
void vApplicationStackOverflowHook(xTaskHandle xTask, signed char* pcTaskName) { |
|||
ZLOGE(TAG, "StackOverflowHook: %s\n", pcTaskName); |
|||
__disable_irq(); |
|||
while (1) { |
|||
} |
|||
} |
|||
void vApplicationMallocFailedHook(void) { |
|||
ZLOGE(TAG, "MallocFailedHook\n"); |
|||
__disable_irq(); |
|||
while (1) { |
|||
} |
|||
} |
|||
} |
|||
SysMgr* SysMgr::ins() { |
|||
static SysMgr s_ins; |
|||
return &s_ins; |
|||
} |
|||
// void SysMgr::regTaskId(osThreadId id) {
|
|||
// m_task[m_ntask].Id = id;
|
|||
// m_ntask++;
|
|||
// }
|
|||
size_t SysMgr::osGetSysRunTime() { return HAL_GetTick(); } |
|||
UBaseType_t uxTaskGetSystemState(TaskStatus_t* const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t* const pulTotalRunTime); |
|||
|
|||
void SysMgr::initedFinished() { //
|
|||
static TaskStatus_t pxTaskStatusArray[SDK_MAX_TASK + 1]; |
|||
UBaseType_t uxArraySize = SDK_MAX_TASK + 1; |
|||
uint32_t pulTotalRunTime; |
|||
m_ntask = uxTaskGetSystemState(pxTaskStatusArray, uxArraySize, &pulTotalRunTime); |
|||
for (int i = 0; i < m_ntask; i++) { |
|||
m_task[i].Id = pxTaskStatusArray[i].xHandle; |
|||
} |
|||
ZASSERT_INFO(m_ntask < SDK_MAX_TASK, "task num is too large, please increase SDK_MAX_TASK"); |
|||
} |
|||
|
|||
size_t SysMgr::osGetMinimumEverFreeHeapSize() { return ::xPortGetMinimumEverFreeHeapSize(); } |
|||
size_t SysMgr::osGetFreeHeapSize() { return ::xPortGetFreeHeapSize(); } |
|||
size_t SysMgr::osGetTotalHeapSize() { return configTOTAL_HEAP_SIZE; } |
|||
int32_t SysMgr::getTaskNum() { return m_ntask; } |
|||
|
|||
void SysMgr::dumpSysInfo() { |
|||
zos_log("---------------Heap Info--------------\n"); |
|||
zos_log("MinimumEverFreeHeapSize: %d\n", osGetMinimumEverFreeHeapSize()); |
|||
zos_log("FreeHeapSize : %d\n", osGetFreeHeapSize()); |
|||
zos_log("TotalHeapSize : %d\n", osGetTotalHeapSize()); |
|||
zos_log(""); |
|||
|
|||
zos_log("---------------Task Info--------------\n"); |
|||
static char buf[40 * SDK_MAX_TASK]; // 40一个任务,最多支持10个任务
|
|||
vTaskList(buf); |
|||
zos_log("Name State Priority Stack Num\n"); |
|||
zlog_raw(buf); |
|||
zos_log("- TaskInfoEnd -\n"); |
|||
} |
|||
|
|||
uint32_t SysMgr::osTaskStackRemainingSize(osThreadId id) { return uxTaskGetStackHighWaterMark(id); } |
|||
const char* SysMgr::osTaskName(osThreadId id) { return pcTaskGetName(id); } |
|||
|
|||
osThreadId SysMgr::osGetId(int offset) { |
|||
if (offset < m_ntask) { |
|||
return m_task[offset].Id; |
|||
} |
|||
return NULL; |
|||
} |
|||
|
|||
void SysMgr::osTaskName(osThreadId id, char* name, int bufsize) { |
|||
strncpy(name, pcTaskGetName(id), bufsize); |
|||
name[bufsize - 1] = 0; |
|||
} |
|||
void SysMgr::osTaskStackRemainingSize(osThreadId id, uint16_t* remainsize) { *remainsize = uxTaskGetStackHighWaterMark(id); } |
|||
void SysMgr::osTaskPriority(osThreadId id, uint16_t* priority) { *priority = uxTaskPriorityGet(id); } |
|||
void SysMgr::osTaskGetState(osThreadId id, char* state) { |
|||
eTaskState task_state = eTaskGetState(id); |
|||
switch (task_state) { |
|||
case eRunning: |
|||
*state = 'X'; |
|||
break; |
|||
case eReady: |
|||
*state = 'R'; |
|||
break; |
|||
case eBlocked: |
|||
*state = 'B'; |
|||
break; |
|||
case eSuspended: |
|||
*state = 'S'; |
|||
break; |
|||
case eDeleted: |
|||
*state = 'D'; |
|||
break; |
|||
default: |
|||
*state = '?'; |
|||
break; |
|||
} |
|||
} |
@ -0,0 +1,49 @@ |
|||
#pragma once
|
|||
#include "cmsis_os.h"
|
|||
|
|||
namespace iflytop { |
|||
class ZTaskInfo { |
|||
public: |
|||
osThreadId Id; |
|||
}; |
|||
|
|||
class SysMgr { |
|||
private: |
|||
/* data */ |
|||
|
|||
public: |
|||
ZTaskInfo m_task[30] = {0}; |
|||
int m_ntask = 0; |
|||
|
|||
static SysMgr* ins(); |
|||
void initedFinished(); |
|||
|
|||
void dumpSysInfo(); |
|||
|
|||
size_t osGetSysRunTime(); |
|||
|
|||
/***********************************************************************************************************************
|
|||
* HeapMgr * |
|||
***********************************************************************************************************************/ |
|||
size_t osGetMinimumEverFreeHeapSize(); |
|||
size_t osGetFreeHeapSize(); |
|||
size_t osGetTotalHeapSize(); |
|||
|
|||
/***********************************************************************************************************************
|
|||
* TaskInfo * |
|||
***********************************************************************************************************************/ |
|||
|
|||
osThreadId osGetId(int offset); |
|||
|
|||
uint32_t osTaskStackRemainingSize(osThreadId id); |
|||
const char* osTaskName(osThreadId id); |
|||
|
|||
void osTaskName(osThreadId id, char* name, int bufsize); |
|||
void osTaskStackRemainingSize(osThreadId id, uint16_t* remainsize); |
|||
void osTaskPriority(osThreadId id, uint16_t* priority); |
|||
void osTaskGetState(osThreadId id, char* state); |
|||
|
|||
int32_t getTaskNum(); |
|||
}; |
|||
|
|||
} // namespace iflytop
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue