/********************************* (C) РОТЕК *********************************** * @module init_task * @file init_task.c * @version 1.0.0 * @date XX.XX.XXXX * $brief Инициализация всех задач. ******************************************************************************* * @history Version Author Comment * XX.XX.XXXX 1.0.0 Telenkov D.A. First release. ******************************************************************************* */ #include "init_task.h" #include "common_config.h" #include "wdg.h" #include "usart.h" //#include "port_microrl.h" #include "led.h" #include "rng.h" #include "buttons.h" #include "jumper.h" #include "rtc.h" #include "stm32f4x7_eth_bsp.h" #include "netconf.h" #include "snmp_api.h" #include "http_server.h" #include "sntp.h" #include "settings_api.h" #include "main.h" #include "trap_api.h" #include "megatec.h" //#include "testing.h" #include "ups_monitor.h" //#include "ups_params.h" //#include "ups_monitor.h" //#include #ifdef PRINTF_STDLIB #include #endif #ifdef PRINTF_CUSTOM #include "tinystdio.h" #endif #include "FreeRTOS.h" #include "task.h" extern bool dhcp; /** * @brief Общая структура настроек */ extern SETTINGS_t sSettings; /** * @brief Хендл для задачи vTaskLedBlink */ TaskHandle_t xTaskToKill; static void vTaskDebug(void *pvParameters); /** * @brief Разовая синхронизация времени при старте контроллера */ TaskHandle_t xHandleSntpOnceSinhro = NULL; /** * @brief Задача инициализации. Запускает основные задачи девайса и умирает. * @retval */ void InitTask(void *params) { // ----------------------------------------------------------------------------- // xTaskCreate(vTaskWdt, "WDT", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); // ----------------------------------------------------------------------------- InitUSART(); ups_megatec_init(); // ----------------------------------------------------------------------------- // RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE); /* SETTINGS_SetDefaultDebug(); SETTINGS_Save();*/ SETTINGS_Load(); set_mode_jumper(); // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- #ifdef USART_DEBUG_ENABLE InitUSART(); // MICRORL_Init(); #endif // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- #ifdef LED_ENABLE LED_Init(); /* Простая мигалка для подтверждения живучести контроллера */ xTaskCreate(vTaskLedBlink, "LED_Blink", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);//&xTaskToKill #endif // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- #ifdef BUTTON_ENABLE BUTTON_Init(); xTaskCreate(vTaskButtons, "Buttons", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); #endif // ----------------------------------------------------------------------------- //xTaskCreate( d_inouts_task, "inouts_task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); // xTaskCreate( d_inouts_test, "d_inouts_test", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); // ----------------------------------------------------------------------------- #ifdef RTC_ENABLE TM_RTC_Init(TM_RTC_ClockSource_External); // Так было // TM_RTC_Init(TM_RTC_ClockSource_Internal); // TODO Уточнить источинк тактирования #endif // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- #ifdef UPS_ENABLE /* UPS_Init(); xTaskCreate(UPS_TaskParsing, "UPS_Parsing", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); xTaskCreate(UPS_TaskState, "UPS_State", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);*/ xTaskCreate(UPS_Monitor, "UPS_Monitor", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); #endif // ----------------------------------------------------------------------------- /* Random number generator */ RNG_Init(); // ----------------------------------------------------------------------------- #ifdef NET_ENABLE ETH_BSP_Config(); LwIP_Init(); #ifdef WEB_SERVER_ENABLE HTTP_Init(); #endif #ifdef SNMP_ENABLE SNMP_Init(); xTaskCreate(SNMP_SysUpTimeTask, "snmpSysUpTime", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); xTaskCreate(snmp_trap_tread, "snmpTrapTest", 3*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); #endif #endif // ----------------------------------------------------------------------------- /* SNTP */ SNTP_Init(); xTaskCreate(vTaskOnceSynchro, "sntpOnceSinhro", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandleSntpOnceSinhro); xTaskCreate(vTaskPeriodicSynchro, "sntpPeriodicSinhro", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); // ----------------------------------------------------------------------------- // Тестирование // Тест таблицы трапов //xTaskCreate(vTestTrap, "Trap_test", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- #ifdef DEBUG_FREERTOS xTaskCreate(vTaskDebug, "Debug", 800, NULL, tskIDLE_PRIORITY, NULL); #endif // ----------------------------------------------------------------------------- /* xTaskCreate(vTaskTesting, "Testing", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);*/ //TEST_InitRS485(); //TEST_IO(); /* Контроль успешной загрузки. Сброс флага bootry */ /* Сброс флага и сохранение нового значения во флеш памяти происходт после некоторой задержки для запуска всех задач */ vTaskDelay(4000); // SETTINGS_ResetBootTry(); // Отправка трапа о перезагрузке в случае статического IP /* if (!dhcp) SNMP_SendUserTrap(DEVICE_REBOOTED); printf("Hello world\r\n");*/ vTaskDelete(NULL); taskYIELD(); } static void vTaskDebug(void *pvParameters) { char msg[700]; for(;;) { vTaskList(msg); printf(msg); printf("\n\r\r\n"); #if LWIP_STATS stats_display(); printf("\r\n\r\n"); #endif vTaskDelay(5000); } } /********************************* (C) РОТЕК **********************************/