/**
******************************************************************************
* @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"
#include "main.h"
// FreeRTOS includes
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
#include "ltimers.h"
#include "head_task.h"
#include "button_task.h"
#include "button_handler.h"
#include "nixie_driver_task.h"
#include "light_sensor_task.h"
#ifdef LED_DRIVER
#include "led_driver_task.h"
#endif
#include "indicate_modes_task.h"
#include "tsl_user.h"
#include "time.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 )
{
InitLTimers ();
NixieDriverInit ();
LightSensorInit();
#ifdef LED_DRIVER
LED_DriverInit ();
#endif
TSL_user_Init ();
TimeInit ();
HeadTaskInit ();
IndicateModesInit ();
ButtonInit ();
}
BaseType_t TaskSuccess = NULL;
// Главный цикл ------------------------------------------------------------- //
int main ()
{
InitAll ();
// Создаем задачи FreeRTOS ----------------------------------------------- //
// ВНИМАНИЕ !!!
// Необходимо проверять кучу при создании задачи! ( и очереди )
// Если в программе используется подключаемая библиотека, которая использует
// ОСРВ, то задача должна там и создаватья. То есть это нужно оформить в
// в виде специальной функции
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 ( 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 ( 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
vTaskStartScheduler (); // И запускаем диспетчер задач ( он же планировщик )
} // end of main
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed ( uint8_t* file, uint32_t line )
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
for (;;)
{
}
}
#endif
// Специальные ф-ии FreeRTOS ------------------------------------------------ //
void vApplicationMallocFailedHook ( void ) { for( ;; ); }
void vApplicationStackOverflowHook ( TaskHandle_t pxTask, char *pcTaskName ) { for( ;; ); }
void vApplicationIdleHook ( void ) { }
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/