mirror of
https://github.com/No-Chicken/Power-Pico.git
synced 2026-04-03 13:02:36 +08:00
将ADC数据发送放到一个高优先级的任务中(之前是在终端中)
This commit is contained in:
@@ -5,8 +5,8 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void MessageTask(void *argument);
|
void MessageReceiveTask(void *argument);
|
||||||
|
void MessageSendTask(void *argument);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,12 @@ extern "C" {
|
|||||||
#include "FreeRTOS.h"
|
#include "FreeRTOS.h"
|
||||||
#include "cmsis_os.h"
|
#include "cmsis_os.h"
|
||||||
|
|
||||||
|
// 定义一个标志位,表示 ADC 数据已经准备好,可以发送了
|
||||||
|
#define FLAG_ADC_HALF_READY 0x0001U // 0000 0001
|
||||||
|
#define FLAG_ADC_FULL_READY 0x0002U // 0000 0010
|
||||||
|
|
||||||
|
extern osThreadId_t MessageSendTaskHandle; // 用于发送 ADC 数据的任务句柄
|
||||||
|
|
||||||
extern osMessageQueueId_t Key_MessageQueue;
|
extern osMessageQueueId_t Key_MessageQueue;
|
||||||
extern osMessageQueueId_t PD_cmd_MessageQueue;
|
extern osMessageQueueId_t PD_cmd_MessageQueue;
|
||||||
extern osMessageQueueId_t PD_handle_event_MsgQueue;
|
extern osMessageQueueId_t PD_handle_event_MsgQueue;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/* Private includes -----------------------------------------------------------*/
|
/* Private includes -----------------------------------------------------------*/
|
||||||
//includes
|
//includes
|
||||||
|
#include "adc.h"
|
||||||
#include "user_TasksInit.h"
|
#include "user_TasksInit.h"
|
||||||
#include "user_MessageTask.h"
|
#include "user_MessageTask.h"
|
||||||
#include "usbd_cdc_if.h"
|
#include "usbd_cdc_if.h"
|
||||||
@@ -16,11 +17,11 @@
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief task for check the usart message
|
* @brief task for receiving messages, such as USB update requests.
|
||||||
* @param argument: Not used
|
* @param argument: Not used
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void MessageTask(void *argument)
|
void MessageReceiveTask(void *argument)
|
||||||
{
|
{
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
@@ -40,3 +41,35 @@ void MessageTask(void *argument)
|
|||||||
osDelay(500);
|
osDelay(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief send adc data to PC via USB,
|
||||||
|
* @param argument: Not used
|
||||||
|
*/
|
||||||
|
void MessageSendTask(void *argument)
|
||||||
|
{
|
||||||
|
uint32_t flags;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
// 1. 等待两个标志中的任意一个 (osFlagsWaitAny)
|
||||||
|
flags = osThreadFlagsWait(FLAG_ADC_HALF_READY | FLAG_ADC_FULL_READY,
|
||||||
|
osFlagsWaitAny,
|
||||||
|
osWaitForever);
|
||||||
|
|
||||||
|
// 2. 判断是不是出错了 (比如超时或者传参错误,通常返回值最高位会置1)
|
||||||
|
if (flags & 0x80000000) {
|
||||||
|
continue; // 错误处理
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 检查具体是哪个标志位被置位了,然后处理对应的数据
|
||||||
|
if (flags & FLAG_ADC_HALF_READY)
|
||||||
|
{
|
||||||
|
Process_ADC_Chunk(&adc_raw_buffer[0][0], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags & FLAG_ADC_FULL_READY)
|
||||||
|
{
|
||||||
|
Process_ADC_Chunk(&adc_raw_buffer[ADC_TIMES][0], 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -41,14 +41,22 @@ const osThreadAttr_t HardwareInitTask_attributes = {
|
|||||||
.priority = (osPriority_t) osPriorityHigh,
|
.priority = (osPriority_t) osPriorityHigh,
|
||||||
};
|
};
|
||||||
|
|
||||||
// message task
|
// message receive task
|
||||||
osThreadId_t MessageTaskHandle;
|
osThreadId_t MessageReceiveTaskHandle;
|
||||||
const osThreadAttr_t MessageTask_attributes = {
|
const osThreadAttr_t MessageReceiveTask_attributes = {
|
||||||
.name = "MessageTask",
|
.name = "MessageReceiveTask",
|
||||||
.stack_size = 128 * 1,
|
.stack_size = 128 * 1,
|
||||||
.priority = (osPriority_t) osPriorityNormal2,
|
.priority = (osPriority_t) osPriorityNormal2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// message send task
|
||||||
|
osThreadId_t MessageSendTaskHandle;
|
||||||
|
const osThreadAttr_t MessageSendTask_attributes = {
|
||||||
|
.name = "MessageSendTask",
|
||||||
|
.stack_size = 128 * 8,
|
||||||
|
.priority = (osPriority_t) osPriorityHigh,
|
||||||
|
};
|
||||||
|
|
||||||
// Key task
|
// Key task
|
||||||
osThreadId_t KeyTaskHandle;
|
osThreadId_t KeyTaskHandle;
|
||||||
const osThreadAttr_t KeyTask_attributes = {
|
const osThreadAttr_t KeyTask_attributes = {
|
||||||
@@ -107,7 +115,8 @@ void User_Tasks_Init(void)
|
|||||||
HardwareInitTaskHandle = osThreadNew(HardwareInitTask, NULL, &HardwareInitTask_attributes);
|
HardwareInitTaskHandle = osThreadNew(HardwareInitTask, NULL, &HardwareInitTask_attributes);
|
||||||
PDUFPTaskHandle = osThreadNew(PDUFPTask, NULL, &PDUFPTask_attributes);
|
PDUFPTaskHandle = osThreadNew(PDUFPTask, NULL, &PDUFPTask_attributes);
|
||||||
KeyTaskHandle = osThreadNew(KeyTask, NULL, &KeyTask_attributes);
|
KeyTaskHandle = osThreadNew(KeyTask, NULL, &KeyTask_attributes);
|
||||||
MessageTaskHandle = osThreadNew(MessageTask, NULL, &MessageTask_attributes);
|
MessageReceiveTaskHandle = osThreadNew(MessageReceiveTask, NULL, &MessageReceiveTask_attributes);
|
||||||
|
MessageSendTaskHandle = osThreadNew(MessageSendTask, NULL, &MessageSendTask_attributes);
|
||||||
LvHandlerTaskHandle = osThreadNew(LvHandlerTask, NULL, &LvHandlerTask_attributes);
|
LvHandlerTaskHandle = osThreadNew(LvHandlerTask, NULL, &LvHandlerTask_attributes);
|
||||||
|
|
||||||
/* add events, ... */
|
/* add events, ... */
|
||||||
|
|||||||
Reference in New Issue
Block a user