gateway_mcu/CH32V303-FreeRTOS/App/application/Src/freerotsTask.c

236 lines
5.9 KiB
C
Raw Normal View History

#include "stdio.h"
#include "freerotsTask.h"
#include "uart_dev.h"
#include "FM_GPIO.h"
#include "FM_ADC.h"
2025-02-28 08:57:09 +00:00
#include "queueUart.h"
#include "upUartParse.h"
2025-03-05 08:27:39 +00:00
#include "flash.h"
#include "parameter.h"
#include "busIdleDetection.h"
2025-02-28 08:57:09 +00:00
#define Common_TASK_PRIO 2
#define Common_STK_SIZE 512
2025-03-05 08:27:39 +00:00
#define Transmit_TASK_PRIO 7
2025-02-28 08:57:09 +00:00
#define Transmit_STK_SIZE 256
2025-03-05 08:27:39 +00:00
#define UpReceive_TASK_PRIO 5
#define UpReceive_STK_SIZE 256
2025-03-05 08:27:39 +00:00
#define DownReceive_TASK_PRIO 4
#define DownReceive_STK_SIZE 256
2025-03-05 08:27:39 +00:00
#define FreeMemory_TASK_PRIO 5
#define FreeMemory_STK_SIZE 256
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
static TaskHandle_t CommonTask_Handler;
static TaskHandle_t TransmitTask_Handler;
static TaskHandle_t UpReceive_Handler;
static TaskHandle_t DownReceive_Handler;
2025-03-05 08:27:39 +00:00
static TaskHandle_t FreeMemory_Handler;
/**
* @brief ι<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
* @param
* @retval
*/
static void common_Task(void *pvParameters)
{
2025-02-28 08:57:09 +00:00
// writePwrCtrlState(Android_PwrCtrl, PwrCtrlOpen);
// proportionalInt();
// while(1) {
// // printf("task1 entry\r\n");
// printf_adc_data();
// USART_ITConfig(UART5, USART_IT_TXE, ENABLE);
// uartInterruptSend(g_Upward_uart5_handle, data, 12);
// vTaskDelay(1000);
// }
2025-03-05 08:27:39 +00:00
uint16_t HeapSizeNum = 0;
/* <20><><EFBFBD>ھ<EFBFBD><DABE><EFBFBD><EFBFBD><EFBFBD>ʱ */
TickType_t xLastWakeTime;
const TickType_t xFrequency = 100; // 50 <20><><EFBFBD>δ𣬼<CEB4>200mS
// <20><>ʼ<EFBFBD><CABC> xLastWakeTime
xLastWakeTime = xTaskGetTickCount();
2025-02-28 08:57:09 +00:00
while (1) {
// uint8_t *Buff = (uint8_t *)pvPortMalloc(200);
// if (Buff == NULL) {
// log_error("Memory allocation failed\n");
// return;
// }
// queueUartSendInfo *sendBuff = (queueUartSendInfo *)Buff;
// sendBuff->length = sizeof("hello world\n");
// sendBuff->data = Buff + sizeof(queueUartSendInfo);
// strlcpy((char *)sendBuff->data, "hello world\n", sizeof("hello world\n"));
// xQueueSend(upward_uart_Queue, &Buff, 10);
// USARTx_SendStr_Len(USART3, "hello world\n", sizeof("hello world\n"));
// uint8_t *Buff = (uint8_t *)pvPortMalloc(200);
// if (Buff == NULL) {
// log_error("Memory allocation failed\n");
// return;
// }
// queueTimeShareSendInfo *sendBuff = (queueTimeShareSendInfo *)Buff;
// sendBuff->length = sizeof("hello world\n");
// sendBuff->data = Buff + sizeof(queueTimeShareSendInfo);
// sendBuff->connectPort = connectJ0;
// strlcpy((char *)sendBuff->data, "hello world\n", sizeof("hello world\n"));
// xQueueSend(J5_0_485_Queue, &Buff, 10);
2025-03-05 08:27:39 +00:00
/* ÿ200ms<6D><73>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
setWorkCurrent(getInCurrent());
setWorkVoltage(getInVoltage());
/* <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD> */
if (HeapSizeNum == 25) {
HeapSizeNum = 0;
log_info("xPortGetFreeHeapSize : %d",xPortGetFreeHeapSize());
}
HeapSizeNum++;
vTaskDelayUntil(&xLastWakeTime, xFrequency);
// vTaskDelay(200);
}
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD>
* @param
* @retval
*/
static void transmit_Task(void *pvParameters)
2025-02-28 08:57:09 +00:00
{
while (1) {
uartQueueSend();
}
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>su806<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* @retval
*/
static void UpReceive_Task(void *pvParameters)
{
while (1) {
upwardUartDataAnalysis(g_Upward_uart5_handle);
vTaskDelay(20);
}
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* @retval
*/
static void DownReceive_Task(void *pvParameters)
{
while (1) {
vTaskDelay(1000);
}
}
2025-03-05 08:27:39 +00:00
/**
* @brief ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
* @param
* @retval
*/
static void FreeMemory_Task(void *pvParameters)
{
while (1) {
// vTaskDelay(1000);
binarySemaphoreFreeMemory();
}
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* @retval
*/
void startApp(void)
2025-03-05 08:27:39 +00:00
{
// printf("RCC->RSTSCKR = %08x \r\n", RCC->RSTSCKR);
// RCC->RSTSCKR |= 1<<24;
/* <20><>ʼ<EFBFBD><CABC>flash<73><68><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> */
Flash_Init();
readConfigParameter();
FM_GPIO_Init();
FM_ADC_Init();
2025-03-05 08:27:39 +00:00
proportionalInt();
Init_Upward_uart(getUpWard_Uart_Baud());
Init_J1_485(getJ1_485_Baud());
Init_J2_485(getJ2_485_Baud());
Init_J3_485(getJ3_485_Baud());
Init_J4_485(getJ4_485_Baud());
Init_J5_0_485(getJ5_0_485_Baud());
2025-02-28 08:57:09 +00:00
uartQueueInit();
2025-03-05 08:27:39 +00:00
binarySemaphoreInit();
softwareTimeInit();
2025-02-28 08:57:09 +00:00
/* create task */
2025-02-28 08:57:09 +00:00
xTaskCreate((TaskFunction_t )common_Task,
(const char* )"commonTask",
(uint16_t )Common_STK_SIZE,
(void* )NULL,
2025-02-28 08:57:09 +00:00
(UBaseType_t )Common_TASK_PRIO,
(TaskHandle_t* )&CommonTask_Handler);
xTaskCreate((TaskFunction_t )transmit_Task,
(const char* )"transmitTask",
(uint16_t )Transmit_STK_SIZE,
(void* )NULL,
(UBaseType_t )Transmit_TASK_PRIO,
(TaskHandle_t* )&TransmitTask_Handler);
xTaskCreate((TaskFunction_t )UpReceive_Task,
(const char* )"UpReceiveTask",
(uint16_t )UpReceive_STK_SIZE,
(void* )NULL,
(UBaseType_t )UpReceive_TASK_PRIO,
(TaskHandle_t* )&UpReceive_Handler);
xTaskCreate((TaskFunction_t )DownReceive_Task,
(const char* )"DownReceiveTask",
(uint16_t )DownReceive_STK_SIZE,
(void* )NULL,
(UBaseType_t )DownReceive_TASK_PRIO,
(TaskHandle_t* )&DownReceive_Handler);
2025-03-05 08:27:39 +00:00
xTaskCreate((TaskFunction_t )FreeMemory_Task,
(const char* )"FreeMemoryTask",
(uint16_t )FreeMemory_STK_SIZE,
(void* )NULL,
(UBaseType_t )FreeMemory_TASK_PRIO,
(TaskHandle_t* )&FreeMemory_Handler);
vTaskStartScheduler();
}