#include "cmsis_os2.h"
|
#include "FreeRTOS.h"
|
#include "task.h"
|
#include "semphr.h"
|
#include "HIDO_Input.h"
|
#include "HIDO_Timer.h"
|
#include "GPS.h"
|
#include "DBG.h"
|
#include "Internet.h"
|
#include "global_param.h"
|
#include "MCUFlash.h"
|
#include "HIDO_ATLite.h"
|
#include "UDPClient.h"
|
#include "bluetooth.h"
|
#include "TCPClient.h"
|
#include "SBUS.h"
|
#include "pwm_ctrol.h"
|
#include "PythonLink.h"
|
#include "motion_mode.h"
|
#include "motion_control_task.h"
|
#include "motion_calibration_task.h"
|
#include "MQTTClient.h"
|
#include "HIDO_Json.h"
|
#include "PathStorage.h"
|
#include "PathTest.h"
|
#include "HTTPClient.h"
|
|
osSemaphoreId_t g_semaphoreHandle = NULL;
|
TaskHandle_t g_app_task_handle = NULL;
|
|
extern uint8_t restart_num;
|
void IdleTask(void)
|
{
|
if(g_com_map[CNT_RESTART]==1)
|
{
|
g_com_map[CNT_RESTART]=0;
|
// printf("%s URTRestart",__debug_info__);
|
HAL_NVIC_SystemReset();
|
}
|
if(g_com_map[MAP_SIGN_INDEX]!=0x55AA)
|
{
|
// printf("%s URTRestart",__debug_info__);
|
HAL_NVIC_SystemReset();
|
// SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //����λ�ص�bootloader
|
}
|
|
}
|
void app_task(void *pvParameters)
|
{
|
HIDO_JsonInit();
|
Shell_Init();
|
GPS_Init();
|
Internet_Init();
|
UDPClient_Init();
|
TCPClient_Init();
|
MQTTClient_Init();
|
BT_Init();
|
SBUS_Init();
|
PythonLink_Init();
|
HTTPClient_Init();
|
FileDownload_Init();
|
// PathStorage_Init(); // 注释掉PathStorage,避免占用HTTPClient
|
OTATest_Init(); // OTA升级测试(替换PathTest_Init)
|
#if (MOTION_ACTIVE_MODE == MOTION_MODE_CONTROL)
|
MotionControl_TaskInit();
|
#elif (MOTION_ACTIVE_MODE == MOTION_MODE_CALIBRATION)
|
MotionCalibration_TaskInit();
|
#else
|
#error "Unsupported MOTION_ACTIVE_MODE"
|
#endif
|
/* ENU调试打印(非校准模式) */
|
static HIDO_UINT32 debug_print_counter = 0;
|
const HIDO_UINT32 DEBUG_PRINT_INTERVAL = 100; /* 每100次循环打印一次 (约500ms) */
|
|
/* GPS GGA上传定时器 */
|
static HIDO_UINT32 gps_upload_counter = 0;
|
const HIDO_UINT32 GPS_UPLOAD_INTERVAL = 200; /* 每200次循环上传一次 (约1000ms) */
|
|
while (1)
|
{
|
//HIDO_UINT32 timeout = HIDO_TimerGetNearestTimeout(1000);
|
HIDO_UINT32 timeout = 5;
|
if (xSemaphoreTake(g_semaphoreHandle, timeout / portTICK_PERIOD_MS) == pdTRUE)
|
{
|
|
}
|
DBG_Poll();
|
BT_Poll();
|
SBUS_Poll();
|
PythonLink_Poll();
|
HIDO_ATLitePoll();
|
Internet_Poll();
|
GPS_Poll();
|
HTTPClient_Poll();
|
MQTTClient_Poll();
|
OTATest_Poll(); // OTA升级测试(替换PathTest_Poll)
|
/* 定时上传GGA报文到4G(每秒一次) */
|
if (++gps_upload_counter >= GPS_UPLOAD_INTERVAL)
|
{
|
gps_upload_counter = 0;
|
GPS_UploadGGA();
|
}
|
|
/* 周期性打印ENU坐标和IMU数据(用于调试GPS解析) */
|
#if (MOTION_ACTIVE_MODE != MOTION_MODE_CALIBRATION)
|
if (++debug_print_counter >= DEBUG_PRINT_INTERVAL)
|
{
|
debug_print_counter = 0;
|
|
ST_GPRMI gprmi;
|
ST_GPIMU gpimu;
|
float enu[3];
|
|
if (GPS_GetGPRMI(&gprmi) == HIDO_OK &&
|
GPS_GetGPIMU(&gpimu) == HIDO_OK &&
|
GPS_GetCurrentENU(enu) == HIDO_OK)
|
{
|
HIDO_Debug2("$DEBUG,ENU,%.2f,%.2f,%.2f,HDG,%.2f,ACC,%.3f,%.3f,%.3f,GYRO,%.3f,%.3f,%.3f\r\n",
|
enu[0], enu[1], enu[2], /* ENU坐标 (m) */
|
gprmi.m_fHeadingAngle, /* 航向角 (度) */
|
gpimu.m_fAccelX, gpimu.m_fAccelY, gpimu.m_fAccelZ, /* 加速度 (m/s²) */
|
gpimu.m_fGyroX, gpimu.m_fGyroY, gpimu.m_fGyroZ); /* 角速度 (rad/s) */
|
}
|
}
|
#endif
|
|
UDPClient_Poll();
|
TCPClient_Poll();
|
IdleTask();
|
HIDO_TimerPoll();
|
}
|
}
|
|
void app_trigger_from_isr(void)
|
{
|
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
|
if (g_semaphoreHandle != NULL)
|
{
|
BaseType_t result = xSemaphoreGiveFromISR(g_semaphoreHandle, &xHigherPriorityTaskWoken);
|
|
if (xHigherPriorityTaskWoken == pdTRUE)
|
{
|
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
}
|
}
|
}
|
|
void app_trigger(void)
|
{
|
if (g_semaphoreHandle != NULL)
|
{
|
xSemaphoreGive(g_semaphoreHandle);
|
}
|
}
|
|
void app_main(void)
|
{
|
MCUFlash_Init();
|
parameter_init();
|
|
{
|
g_com_map[VERSION] = (1<<8)|(1);
|
uint16_t dev_id = g_com_map[DEV_ID];
|
uint16_t udp_port = g_com_map[UDP_PORT];
|
uint16_t tcp_port = g_com_map[TCP_PORT];
|
uint16_t ip0 = g_com_map[IP_0];
|
uint16_t ip1 = g_com_map[IP_1];
|
uint16_t ip2 = g_com_map[IP_2];
|
uint16_t ip3 = g_com_map[IP_3];
|
uint16_t tip0 = g_com_map[TCP_IP_0];
|
uint16_t tip1 = g_com_map[TCP_IP_1];
|
uint16_t tip2 = g_com_map[TCP_IP_2];
|
uint16_t tip3 = g_com_map[TCP_IP_3];
|
g_com_map[MQTT_IP_0] = 39;
|
g_com_map[MQTT_IP_1] = 99;
|
g_com_map[MQTT_IP_2] = 43;
|
g_com_map[MQTT_IP_3] = 227;
|
g_com_map[MQTT_PORT] = 1883;
|
uint16_t mip0 = g_com_map[MQTT_IP_0];
|
uint16_t mip1 = g_com_map[MQTT_IP_1];
|
uint16_t mip2 = g_com_map[MQTT_IP_2];
|
uint16_t mip3 = g_com_map[MQTT_IP_3];
|
uint16_t mqtt_port = g_com_map[MQTT_PORT];
|
|
|
uint16_t version = g_com_map[VERSION];
|
|
HIDO_Debug("[BOOT] Version: %u\r\n", version);
|
HIDO_Debug("[BOOT] DeviceID: %u\r\n", dev_id);
|
HIDO_Debug("[BOOT] UDP Server: %u.%u.%u.%u:%u\r\n", ip0, ip1, ip2, ip3, udp_port);
|
HIDO_Debug("[BOOT] TCP Server: %u.%u.%u.%u:%u\r\n", tip0, tip1, tip2, tip3, tcp_port);
|
HIDO_Debug("[BOOT] MQTT Server: %u.%u.%u.%u:%u\r\n", mip0, mip1, mip2, mip3, mqtt_port);
|
}
|
osSemaphoreAttr_t semaphore_attr = {
|
.name = "MySemaphore",
|
.attr_bits = 0,
|
.cb_mem = NULL,
|
.cb_size = 0};
|
|
//
|
g_semaphoreHandle = osSemaphoreNew(1, 0, &semaphore_attr);
|
|
xTaskCreate(
|
app_task,
|
"AppTask",
|
2048,
|
NULL,
|
tskIDLE_PRIORITY + 1,
|
&g_app_task_handle);
|
}
|