/**
******************************************************************************
* @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();
LightSensorInit();
NixieDriverInit();
HeadTaskInit();
IndicateModesInit();
#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;
}
}
}
}
}
BaseType_t TaskSuccess;
// Главный цикл ------------------------------------------------------------- //
int main ()
{
InitAll ();
// Создаем задачи FreeRTOS ----------------------------------------------- //
// ВНИМАНИЕ !!!
// Необходимо проверять кучу при создании задачи! ( и очереди )
// Если в программе используется подключаемая библиотека, которая использует
// ОСРВ, то задача должна там и создаватья. То есть это нужно оформить в
// в виде специальной функции
TaskSuccess = xTaskCreate(Button_Task, "Button_Task", STACK_SIZE_BUTTON, NULL, tskIDLE_PRIORITY + 2, NULL);
configASSERT(TaskSuccess);
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);
#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****/