diff options
Diffstat (limited to 'Project/src/main.c')
-rw-r--r-- | Project/src/main.c | 134 |
1 files changed, 86 insertions, 48 deletions
diff --git a/Project/src/main.c b/Project/src/main.c index bc9c4ac..2132d87 100644 --- a/Project/src/main.c +++ b/Project/src/main.c @@ -61,6 +61,7 @@ #include "indicate_modes_task.h" #include "tsl_user.h" #include "time.h" +#include "stm32f0xx_usart.h" /* Private typedefs ----------------------------------------------------------*/ @@ -70,75 +71,112 @@ // Задаем размеры кучи для каждой задачи отдельно // - как правильно определить необходимый минимум для кучи задачи? -#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 ) +#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 ) +#define STACK_SIZE_LED_DRIVER ((unsigned short) 70) #endif -#define STACK_SIZE_INDICATE_MODES ( (unsigned short) 250 ) +#define STACK_SIZE_INDICATE_MODES ((unsigned short) 250) /* Private functions prototype ---------------------------------------------- */ +static void USART1Init(void) +{ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1); + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; + GPIO_Init(GPIOA, &GPIO_InitStructure); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; + GPIO_Init(GPIOA, &GPIO_InitStructure); + USART_InitTypeDef usart1_init = {0}; + usart1_init.USART_BaudRate = 115200; + usart1_init.USART_WordLength = USART_WordLength_8b; + usart1_init.USART_StopBits = USART_StopBits_1; + usart1_init.USART_Parity = USART_Parity_No; + usart1_init.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + usart1_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_Init(USART1, &usart1_init); + USART_Cmd(USART1, ENABLE); +} // ---------------------------------------------------------------------------- // Инициализация до создания задач // ---------------------------------------------------------------------------- void InitAll ( void ) { - SystemInit(); - InitLTimers (); - NixieDriverInit (); - LightSensorInit(); + SystemInit(); + USART1Init(); + InitLTimers(); + LightSensorInit(); +#if 0 + NixieDriverInit(); + HeadTaskInit(); + IndicateModesInit(); +#endif #ifdef LED_DRIVER - LED_DriverInit (); + LED_DriverInit(); #endif - TSL_user_Init (); - TimeInit (); - HeadTaskInit (); - IndicateModesInit (); - ButtonInit (); + TSL_user_Init(); + TimeInit(); + ButtonInit(); } -BaseType_t TaskSuccess = NULL; +static void TestUart(void *arg) +{ + (void) arg; + while (1) { + if (USART1->ISR & USART_ISR_FE) { + USART1->ICR &= USART_ICR_FECF; + } + if (USART1->ISR & USART_ISR_RXNE) { + const uint16_t data = USART_ReceiveData(USART1); + USART_SendData(USART1, data); + } + } +} + +BaseType_t TaskSuccess; // Главный цикл ------------------------------------------------------------- // 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 ); - + 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); +#if 0 + 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 ); + TaskSuccess = xTaskCreate(LED_Driver_Task, "LED_Driver_Task", STACK_SIZE_LED_DRIVER, NULL, tskIDLE_PRIORITY + 2, NULL); + configASSERT(TaskSuccess); #endif - - vTaskStartScheduler (); // И запускаем диспетчер задач ( он же планировщик ) - + TaskSuccess = xTaskCreate(TestUart, "TestUart", 200, NULL, tskIDLE_PRIORITY + 2, NULL); + configASSERT(TaskSuccess); + vTaskStartScheduler(); // И запускаем диспетчер задач ( он же планировщик ) } // end of main |