/** ****************************************************************************** * @file STM32L152_Ex01_3TKeys_EVAL\src\main.c * @author MCD Application Team * @version V1.1.0 * @date 24-February-2014 * @brief Basic example of how to use the STMTouch Driver. ****************************************************************************** * @attention * *

© COPYRIGHT 2014 STMicroelectronics

* * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.st.com/software_license_agreement_liberty_v2 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ****************************************************************************** */ /* Здесь необходимо создать большой комментарий о характеристиках железа МК. Или же лучше создать отдельный файл и сделать на него ссылку. Кстати, такой файл создает программа STM32CubeMX. И вообще, нужно создать глобальную папку проекта, где будет лежать все по полочкам ( схема, программа, текстовые файлы, документация и тд ) */ // Это программа для версии NixieClock_v2, которая является модифицированной версией предыдущей // NixieLUT /* Includes ------------------------------------------------------------------*/ #include "time.h" // FreeRTOS includes #include "FreeRTOS.h" #include "task.h" #include "queue.h" #include "semphr.h" #include "ltimers/ltimers.h" #include "head_task/head_task.h" #include "button/button_task.h" #include "button/button_handler.h" #include "nixie_driver/nixie_driver_task.h" #include "light_sensor/light_sensor_task.h" #ifdef LED_DRIVER #include "led_driver/led_driver_task.h" #endif #include "indicate/indicate_modes_task.h" #include "tsl_user.h" #include "time/time.h" #include "platform/platform.h" #include "unistd.h" /* Private typedefs ----------------------------------------------------------*/ /* Private defines -----------------------------------------------------------*/ /* Private macros ------------------------------------------------------------*/ // Задаем размеры кучи для каждой задачи отдельно // - как правильно определить необходимый минимум для кучи задачи? #define STACK_SIZE_HEAD ((unsigned short) 230) #define STACK_SIZE_NIXIE_DRIVER ((unsigned short) 80) #define STACK_SIZE_BUTTON ((unsigned short) 200) #define STACK_SIZE_LIGHT_SENSOR ((unsigned short) 70) #ifdef LED_DRIVER #define STACK_SIZE_LED_DRIVER ((unsigned short) 70) #endif #define STACK_SIZE_INDICATE_MODES ((unsigned short) 250) /* Private functions prototype ---------------------------------------------- */ // ---------------------------------------------------------------------------- // Инициализация до создания задач // ---------------------------------------------------------------------------- void InitAll ( void ) { PlatformInit(); InitLTimers(); #if 0 LightSensorInit(); NixieDriverInit(); HeadTaskInit(); IndicateModesInit(); #endif #ifdef LED_DRIVER LED_DriverInit(); #endif TSL_user_Init(); TimeInit(); ButtonInit(); } static void TestUart(void *arg) { (void) arg; const int wifi_fd = PlatformGetWiFiFileDescriptor(); while (1) { char buf[50]; const ssize_t rret = read(wifi_fd, buf, sizeof(buf)); if (rret > 0) { const size_t rsize = rret; for (size_t written = 0; written < rsize; written++) { const ssize_t wret = write(STDOUT_FILENO, buf, rsize - written); if (wret > 0) { written += (size_t)wret; } } } const ssize_t rret2 = read(STDIN_FILENO, buf, sizeof(buf)); if (rret2 > 0) { const size_t rsize = rret2; for (size_t written = 0; written < rsize; written++) { const ssize_t wret = write(wifi_fd, buf, rsize - written); if (wret > 0) { written += (size_t)wret; } } } } } BaseType_t TaskSuccess; // Главный цикл ------------------------------------------------------------- // int main () { InitAll (); // Создаем задачи FreeRTOS ----------------------------------------------- // // ВНИМАНИЕ !!! // Необходимо проверять кучу при создании задачи! ( и очереди ) // Если в программе используется подключаемая библиотека, которая использует // ОСРВ, то задача должна там и создаватья. То есть это нужно оформить в // в виде специальной функции TaskSuccess = xTaskCreate(Button_Task, "Button_Task", STACK_SIZE_BUTTON, NULL, tskIDLE_PRIORITY + 2, NULL); configASSERT(TaskSuccess); #if 0 TaskSuccess = xTaskCreate(LightSensor_Task, "LightSensor_Task", STACK_SIZE_LIGHT_SENSOR, NULL, tskIDLE_PRIORITY + 2, NULL); configASSERT(TaskSuccess); TaskSuccess = xTaskCreate(Head_Task, "Head_Task", STACK_SIZE_HEAD, NULL, tskIDLE_PRIORITY + 2, NULL); configASSERT(TaskSuccess); TaskSuccess = xTaskCreate(IndicateModes_Task, "IndicateModes_Task", STACK_SIZE_INDICATE_MODES, NULL, tskIDLE_PRIORITY + 2, NULL); configASSERT(TaskSuccess); TaskSuccess = xTaskCreate(NixieDriver_Task, "NixieDriver_Task", STACK_SIZE_NIXIE_DRIVER, NULL, tskIDLE_PRIORITY + 2, NULL); configASSERT(TaskSuccess); #endif #ifdef LED_DRIVER TaskSuccess = xTaskCreate(LED_Driver_Task, "LED_Driver_Task", STACK_SIZE_LED_DRIVER, NULL, tskIDLE_PRIORITY + 2, NULL); configASSERT(TaskSuccess); #endif TaskSuccess = xTaskCreate(TestUart, "TestUart", 200, NULL, tskIDLE_PRIORITY + 2, NULL); configASSERT(TaskSuccess); vTaskStartScheduler(); // И запускаем диспетчер задач ( он же планировщик ) } // end of main /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/