diff --git a/.mxproject b/.mxproject index b7a94751c8391ea6d776f49c08bcf0c41079a908..d3136ee059579a79eaed8af3f589d4c2aa9383ce 100644 --- a/.mxproject +++ b/.mxproject @@ -9,20 +9,20 @@ CDefines=USE_HAL_DRIVER;STM32F413xx;USE_HAL_DRIVER;USE_HAL_DRIVER; [PreviousGenFiles] AdvancedFolderStructure=true HeaderFileListSize=4 -HeaderFiles#0=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Inc/FreeRTOSConfig.h -HeaderFiles#1=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Inc/stm32f4xx_it.h -HeaderFiles#2=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Inc/stm32f4xx_hal_conf.h -HeaderFiles#3=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Inc/main.h +HeaderFiles#0=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Inc/FreeRTOSConfig.h +HeaderFiles#1=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Inc/stm32f4xx_it.h +HeaderFiles#2=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Inc/stm32f4xx_hal_conf.h +HeaderFiles#3=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Inc/main.h HeaderFolderListSize=1 -HeaderPath#0=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Inc +HeaderPath#0=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Inc HeaderFiles=; SourceFileListSize=5 -SourceFiles#0=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Src/freertos.c -SourceFiles#1=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Src/stm32f4xx_it.c -SourceFiles#2=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Src/stm32f4xx_hal_msp.c -SourceFiles#3=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Src/stm32f4xx_hal_timebase_tim.c -SourceFiles#4=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Src/main.c +SourceFiles#0=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Src/freertos.c +SourceFiles#1=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Src/stm32f4xx_it.c +SourceFiles#2=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Src/stm32f4xx_hal_msp.c +SourceFiles#3=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Src/stm32f4xx_hal_timebase_tim.c +SourceFiles#4=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Src/main.c SourceFolderListSize=1 -SourcePath#0=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Src +SourcePath#0=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Src SourceFiles=; diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 40b2ab9b8b57ea90cb4002c414ec893b07f247fd..671c2492c4aa2f13ad4ea8b4ddcbd078d7a6043d 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -60,9 +60,23 @@ void Error_Handler(void); /* USER CODE END EFP */ /* Private defines -----------------------------------------------------------*/ +#define LCD_D7_Pin GPIO_PIN_2 +#define LCD_D7_GPIO_Port GPIOE +#define LCD_D4_Pin GPIO_PIN_4 +#define LCD_D4_GPIO_Port GPIOE +#define LCD_D5_Pin GPIO_PIN_5 +#define LCD_D5_GPIO_Port GPIOE +#define LCD_D6_Pin GPIO_PIN_6 +#define LCD_D6_GPIO_Port GPIOE #define USER_Btn_Pin GPIO_PIN_13 #define USER_Btn_GPIO_Port GPIOC #define USER_Btn_EXTI_IRQn EXTI15_10_IRQn +#define LCD_RS_Pin GPIO_PIN_7 +#define LCD_RS_GPIO_Port GPIOF +#define LCD_RW_Pin GPIO_PIN_8 +#define LCD_RW_GPIO_Port GPIOF +#define LCD_E_Pin GPIO_PIN_9 +#define LCD_E_GPIO_Port GPIOF #define MCO_Pin GPIO_PIN_0 #define MCO_GPIO_Port GPIOH #define Matrix_Pin GPIO_PIN_0 diff --git a/Core/Src/main.c b/Core/Src/main.c index df8f91238cc68fb3a900719c0be02ff7e991085d..118bfd8d95ae0e1e959f90456af0e9a17f82b3a7 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -26,7 +26,6 @@ #include "ws2812b.h" #include "queue.h" #include "semphr.h" - /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -73,6 +72,13 @@ const osThreadAttr_t Task3_attributes = { .stack_size = 128 * 4, .priority = (osPriority_t) osPriorityNormal, }; +/* Definitions for Task4 */ +osThreadId_t Task4Handle; +const osThreadAttr_t Task4_attributes = { + .name = "Task4", + .stack_size = 128 * 4, + .priority = (osPriority_t) osPriorityLow, +}; /* Definitions for toLEDMatrix */ osMessageQueueId_t toLEDMatrixHandle; const osMessageQueueAttr_t toLEDMatrix_attributes = { @@ -83,29 +89,27 @@ osMessageQueueId_t fromLEDMatrixHandle; const osMessageQueueAttr_t fromLEDMatrix_attributes = { .name = "fromLEDMatrix" }; - -/* Definition for DisplayQueue */ -osMessageQueueId_t toDisplayQueue; +/* Definitions for toDisplayQueue */ +osMessageQueueId_t toDisplayQueueHandle; const osMessageQueueAttr_t toDisplayQueue_attributes = { - .name = "toDisplay" + .name = "toDisplayQueue" }; - -/* Definitions for mySem */ -osSemaphoreId_t mySemHandle; -const osSemaphoreAttr_t mySem_attributes = { - .name = "mySem" -}; - - /* USER CODE BEGIN PV */ +SemaphoreHandle_t SemLevelsHandle; +SemaphoreHandle_t SemBtn1Handle; +SemaphoreHandle_t SemBtn2Handle; +SemaphoreHandle_t SemBtn3Handle; +SemaphoreHandle_t SemBtn4Handle; +SemaphoreHandle_t SemStartGameHandle; + typedef enum { false, true } bool; typedef struct matrix_s { bool isRunning; bool hasLost; - // 0 = off, 1 = 1st row. 2 = 2nd row. 4 = 3rd row, 8 = 4th row // example: 0xA = 0b1010 = new Element in 2nd and 4th row uint8_t nextLED; // 0..0xFF + uint16_t delay; } matrix_s; /* USER CODE END PV */ @@ -117,17 +121,23 @@ static void MX_DMA_Init(void); static void MX_USART3_UART_Init(void); static void MX_USB_OTG_FS_PCD_Init(void); static void MX_TIM2_Init(void); -void Task01(void *argument); +void Levels(void *argument); void Task02(void *argument); void Validate(void *argument); - +void Display(void *argument); /* USER CODE BEGIN PFP */ +extern int rand(void); extern TIM_HandleTypeDef htim7; - SemaphoreHandle_t SemBtn1; - SemaphoreHandle_t SemBtn2; - SemaphoreHandle_t SemBtn3; - SemaphoreHandle_t SemBtn4; + +void lcd_init(void); +void lcd_put_cur(int, int); +void lcd_send_data(char); +void ldc_send_cmd(char); +void send_to_lcd(char,int); +void lcd_send_string(char*); +void lcd_clear(void); + /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ @@ -169,6 +179,20 @@ int main(void) MX_TIM2_Init(); /* USER CODE BEGIN 2 */ + +// lcd_init(); +// lcd_clear(); +// lcd_put_cur(0, 0); +// lcd_send_string("HELLO "); +// // lcd_send_string("WORLD "); +// // lcd_send_string("FROM"); +// // HAL_Delay(1000); +// lcd_put_cur(1, 0); +// lcd_send_string("CONTROLLERSTECH"); +// lcd_clear(); + // HAL_Delay(2000); + // lcd_clear(); + /* USER CODE END 2 */ /* Init scheduler */ @@ -178,17 +202,25 @@ int main(void) /* add mutexes, ... */ /* USER CODE END RTOS_MUTEX */ - /* Create the semaphores(s) */ - /* creation of mySem */ - mySemHandle = osSemaphoreNew(1, 1, &mySem_attributes); - /* USER CODE BEGIN RTOS_SEMAPHORES */ /* add semaphores, ... */ + /* creation of SemLevels */ + SemLevelsHandle = xSemaphoreCreateBinary(); + + /* creation of SemBtn1 */ + SemBtn1Handle = xSemaphoreCreateBinary(); + + /* creation of SemBtn2 */ + SemBtn2Handle = xSemaphoreCreateBinary(); - SemBtn1 = xSemaphoreCreateBinary(); - SemBtn2 = xSemaphoreCreateBinary(); - SemBtn3 = xSemaphoreCreateBinary(); - SemBtn4 = xSemaphoreCreateBinary(); + /* creation of SemBtn3 */ + SemBtn3Handle = xSemaphoreCreateBinary(); + + /* creation of SemBtn4 */ + SemBtn4Handle = xSemaphoreCreateBinary(); + + /* creation of SemStartGame */ + SemStartGameHandle = xSemaphoreCreateBinary(); /* USER CODE END RTOS_SEMAPHORES */ @@ -202,9 +234,9 @@ int main(void) /* creation of fromLEDMatrix */ fromLEDMatrixHandle = osMessageQueueNew (16, sizeof(matrix_s), &fromLEDMatrix_attributes); - - /* creation of toDisplay Queue */ - toDisplayQueue = osMessageQueueNew(16, 8, &toDisplayQueue_attributes); + + /* creation of toDisplayQueue */ + toDisplayQueueHandle = osMessageQueueNew (16, sizeof(uint16_t), &toDisplayQueue_attributes); /* USER CODE BEGIN RTOS_QUEUES */ /* add queues, ... */ @@ -212,13 +244,16 @@ int main(void) /* Create the thread(s) */ /* creation of Task1 */ - Task1Handle = osThreadNew(Task01, NULL, &Task1_attributes); + Task1Handle = osThreadNew(Levels, NULL, &Task1_attributes); /* creation of Task2 */ Task2Handle = osThreadNew(Task02, NULL, &Task2_attributes); /* creation of Task3 */ - Task3Handle = osThreadNew(Validate, NULL, &Task3_attributes); +// Task3Handle = osThreadNew(Validate, NULL, &Task3_attributes); + +// /* creation of Task4 */ +// Task4Handle = osThreadNew(Display, NULL, &Task4_attributes); /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ @@ -243,6 +278,8 @@ int main(void) /* USER CODE BEGIN 3 */ } + + /* USER CODE END 3 */ } @@ -451,13 +488,21 @@ static void MX_GPIO_Init(void) GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOE, LCD_D7_Pin|LCD_D4_Pin|LCD_D5_Pin|LCD_D6_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOF, LCD_RS_Pin|LCD_RW_Pin|LCD_E_Pin, GPIO_PIN_RESET); + /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, LED_green_Pin|LED_red_Pin|LED_blue_Pin, GPIO_PIN_RESET); @@ -467,12 +512,26 @@ static void MX_GPIO_Init(void) /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin, GPIO_PIN_RESET); + /*Configure GPIO pins : LCD_D7_Pin LCD_D4_Pin LCD_D5_Pin LCD_D6_Pin */ + GPIO_InitStruct.Pin = LCD_D7_Pin|LCD_D4_Pin|LCD_D5_Pin|LCD_D6_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + /*Configure GPIO pin : USER_Btn_Pin */ GPIO_InitStruct.Pin = USER_Btn_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(USER_Btn_GPIO_Port, &GPIO_InitStruct); + /*Configure GPIO pins : LCD_RS_Pin LCD_RW_Pin LCD_E_Pin */ + GPIO_InitStruct.Pin = LCD_RS_Pin|LCD_RW_Pin|LCD_E_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + /*Configure GPIO pins : LED_green_Pin LED_red_Pin LED_blue_Pin */ GPIO_InitStruct.Pin = LED_green_Pin|LED_red_Pin|LED_blue_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; @@ -519,34 +578,131 @@ static void MX_GPIO_Init(void) } /* USER CODE BEGIN 4 */ + +void send_to_lcd (char data, int rs) +{ + HAL_GPIO_WritePin(LCD_RS_GPIO_Port, LCD_RS_Pin, rs); // rs = 1 for data, rs=0 for command + /* write the data to the respective pin */ + HAL_GPIO_WritePin(LCD_D7_GPIO_Port, LCD_D7_Pin, ((data>>3)&0x01)); + HAL_GPIO_WritePin(LCD_D6_GPIO_Port, LCD_D6_Pin, ((data>>2)&0x01)); + HAL_GPIO_WritePin(LCD_D5_GPIO_Port, LCD_D5_Pin, ((data>>1)&0x01)); + HAL_GPIO_WritePin(LCD_D4_GPIO_Port, LCD_D4_Pin, ((data>>0)&0x01)); + /* Toggle EN PIN to send the data + * if the HCLK > 100 MHz, use the 20 us delay + * if the LCD still doesn't work, increase the delay to 50, 80 or 100.. + */ + HAL_GPIO_WritePin(LCD_E_GPIO_Port, LCD_E_Pin, 1); + vTaskDelay(20); + HAL_GPIO_WritePin(LCD_E_GPIO_Port, LCD_E_Pin, 0); + vTaskDelay(20); +} + +void lcd_send_cmd (char cmd) +{ + char datatosend; + /* send upper nibble first */ + datatosend = ((cmd>>4)&0x0f); + send_to_lcd(datatosend,0); // RS must be while sending command + /* send Lower Nibble */ + datatosend = ((cmd)&0x0f); + send_to_lcd(datatosend, 0); +} + +void lcd_send_data (char data) +{ + char datatosend; + + /* send higher nibble */ + datatosend = ((data>>4)&0x0f); + send_to_lcd(datatosend, 1); // rs =1 for sending data + /* send Lower nibble */ + datatosend = ((data)&0x0f); + send_to_lcd(datatosend, 1); +} + +void lcd_init (void) +{ + // 4 bit initialisation + HAL_Delay(50); // wait for >40ms + lcd_send_cmd (0x30); + HAL_Delay(5); // wait for >4.1ms + lcd_send_cmd (0x30); + HAL_Delay(1); // wait for >100us + lcd_send_cmd (0x30); + HAL_Delay(10); + lcd_send_cmd (0x20); // 4bit mode + HAL_Delay(10); + + // dislay initialisation + lcd_send_cmd (0x28); // Function set --> DL=0 (4 bit mode), N = 1 (2 line display) F = 0 (5x8 characters) + HAL_Delay(1); + lcd_send_cmd (0x08); //Display on/off control --> D=0,C=0, B=0 ---> display off + HAL_Delay(1); + lcd_send_cmd (0x01); // clear display + HAL_Delay(1); + HAL_Delay(1); + lcd_send_cmd (0x06); //Entry mode set --> I/D = 1 (increment cursor) & S = 0 (no shift) + HAL_Delay(1); + lcd_send_cmd (0x0C); //Display on/off control --> D = 1, C and B = 0. (Cursor and blink, last two bits) +} + +void lcd_put_cur(int row, int col) +{ + switch (row) + { + case 0: + col |= 0x80; + break; + case 1: + col |= 0xC0; + break; + } + + lcd_send_cmd (col); +} + +void lcd_send_string (char *str) +{ + while (*str) lcd_send_data (*str++); +} + +void lcd_clear (void) +{ + lcd_send_cmd(0x01); + HAL_Delay(2); +} + + void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == btn1) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8); - xSemaphoreGive(SemBtn1); + xSemaphoreGiveFromISR(SemBtn1Handle, NULL); //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0); } else if(GPIO_Pin == btn2) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9); - xSemaphoreGive(SemBtn2); + xSemaphoreGiveFromISR(SemBtn2Handle, NULL); //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7); } else if(GPIO_Pin == btn3) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_10); - xSemaphoreGive(SemBtn3); + xSemaphoreGiveFromISR(SemBtn3Handle, NULL); //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14); } else if(GPIO_Pin == btn4) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_11); - xSemaphoreGive(SemBtn4); + xSemaphoreGiveFromISR(SemBtn4Handle, NULL); // HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14); } - else if(GPIO_Pin == GPIO_PIN_13) + else if(GPIO_Pin == USER_Btn_Pin) { + xSemaphoreGiveFromISR(SemStartGameHandle, NULL); +// HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14); //HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14, GPIO_PIN_RESET); //HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11); HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9); @@ -555,24 +711,90 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) /* USER CODE END 4 */ -/* USER CODE BEGIN Header_Task01 */ +/* USER CODE BEGIN Header_Levels */ /** * @brief Function implementing the Task1 thread. * @param argument: Not used * @retval None */ -uint32_t x = 0u; -/* USER CODE END Header_Task01 */ -void Task01(void *argument) +/* USER CODE END Header_Levels */ +void Levels(void *argument) { /* USER CODE BEGIN 5 */ + matrix_s sendQueue; + int random; + int rand1; + int rand2; + int rand3; + int counter=0; + int number; /* Infinite loop */ for(;;) { - //LED3toggle(); - osDelay(1000); - osDelay(1); - } + if( xSemaphoreTake( SemLevelsHandle, ( TickType_t ) 1000 ) == pdTRUE ) + { + number=0; + if (counter <= 7) + { + random = 0; + } + else if(counter <=15) + { + random =(rand()%2); + } + else if(counter <=20) + { + random =(rand()%3); + } + else + { + random =(rand()%4); + } + + counter ++; + + if(random ==0) + { + rand1 =(rand()%4); + number ^=(1 <<rand1); + } + else if (random ==1) + { + rand1 =(rand()%4); + rand2 =(rand()%3); + if (rand1 == rand2 & rand1 !=3) + { + rand2 ++; + } + else{ + rand2 --; + } + number ^=(1 <<rand1); + number ^=(1 <<rand2); + } + else if(random ==2) + { + rand1 =(rand()%4); + for(int i =0; i<4; i++) + { + if (i!= rand1) + { + number ^=(1 <<i); + } + } + } + else + { + number=15; + } + + sendQueue.nextLED=number; + sendQueue.isRunning = true; + sendQueue.hasLost = false; + sendQueue.delay = 750; + xQueueSend( toLEDMatrixHandle, &sendQueue, ( TickType_t ) 0 ); + } + } /* USER CODE END 5 */ } @@ -587,94 +809,144 @@ void Task02(void *argument) { /* USER CODE BEGIN Task02 */ - uint32_t colors[] = { - WHITE - ,BLUE - ,PURPLE - ,RED - ,GREEN - ,ORANGE - ,TURQUOISE - ,YELLOW + // init constants & variables + enum ROW { ROW1, ROW2, ROW3, ROW4 }; + const uint8_t ROWS = 4; + const uint8_t FIELDS = 16; // 4 rows and 4 columns = 16 + uint32_t colors[] = { + WHITE + ,BLUE + ,PURPLE + ,RED + ,GREEN + ,ORANGE + ,TURQUOISE + ,YELLOW + }; + uint32_t led_matrix[] = { + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0 }; - uint8_t num_colors = sizeof(colors) / sizeof(uint32_t); + + uint8_t num_colors = sizeof(colors) / sizeof(uint32_t) - sizeof(uint32_t); LED led = *get_instance(); const uint8_t gameRowXOR = 0xf; - - /* Infinite loop */ + uint16_t delay = 500; + bool isRunning = false; + bool scrollOut = false; + uint8_t scrollCounter = 0; // init Matrix - //LED_set_all_RGB_t(BLACK, 1); - //LED_init(); - HAL_Delay(200); - led.LED_set_all_RGB_32(TURQUOISE, 1); -// HAL_Delay(2000); - //LED_set_all_off(1); - vTaskDelay(2000); - led.LED_set_all_off(1); - vTaskDelay(200); - - led.LED_set_RGB(num_colors-1,10,10,10); - led.LED_transmit(); - vTaskDelay(2000); - //LED_set_all_RGB_32(BLUE, 1); - - - uint8_t delay = 250; - while(1){ - for(uint8_t row = 0; row < NUM_LED; row=row+16) { - for(uint8_t i = row, index=0; i < row+8/*NUM_LED >> 3*/; i=i+1,index++){ // gameRow is first index of specific row - led.LED_set_all_off(1); - led.LED_set_RGB_32(i , BLUE | GREEN | RED); - led.LED_set_RGB_32(i ^ gameRowXOR, BLUE | GREEN | RED); - if (i > row && i < row+8) { - led.LED_set_RGB_32(i-1 , PURPLE /*colors[index+1]*/); - led.LED_set_RGB_32((i-1) ^ gameRowXOR, PURPLE /*colors[index+1]*/); + const uint8_t say_hi[] = {1,2,3,6,9,10,11,12,14,15}; + const uint8_t say_hi_length = sizeof(say_hi) / sizeof(uint8_t) - sizeof(uint8_t); + for(uint8_t i=0; i <= say_hi_length-3; i++) led_matrix[say_hi[i]] = TURQUOISE; + for(uint8_t i=say_hi_length-2; i <= say_hi_length; i++) led_matrix[say_hi[i]] = RED; + + /* Infinite loop */ + while(1) { + + // set led matrix to current colors + led.LED_set_all_off(0); + uint8_t LEDMatrixIndex = 0; + for(uint8_t cube = 0; cube < FIELDS;) { + for(uint8_t column = 0; column <= 6; column+=2) { + led.LED_set_RGB_32(LEDMatrixIndex , led_matrix[cube]); + led.LED_set_RGB_32(LEDMatrixIndex ^ gameRowXOR , led_matrix[cube]); + led.LED_set_RGB_32(LEDMatrixIndex+1 , led_matrix[cube]); + led.LED_set_RGB_32(LEDMatrixIndex+1 ^ gameRowXOR, led_matrix[cube]); + cube++; + LEDMatrixIndex += 2; } + LEDMatrixIndex += 8; + } led.LED_transmit(); - vTaskDelay(--delay); - } -} - vTaskDelay(2000); - break; -} - - matrix_s sendQueue; - sendQueue.isRunning = true; -// osMessageQueuePut(toLEDMatrixHandle, testQueue, 1, 1 - xQueueSend(toLEDMatrixHandle, &sendQueue, (portTickType) 1); - matrix_s recvQueue; - if (xQueueReceive(toLEDMatrixHandle, &recvQueue, (portTickType) 10 ) == true) - { - if (recvQueue.isRunning == true) { - led.LED_set_all_RGB_32(YELLOW, 1); - while (1) { } + // end set colors + + // try to take Semaphore from IRQ if user pressed USER_BTN to start game + if ( scrollOut || xSemaphoreTake( SemStartGameHandle, ( TickType_t ) 10 ) == pdTRUE ) { + //scroll out "Hi" + scrollOut = true; + scrollCounter++; + if (scrollCounter > 5) { + isRunning = true; + // release Levels Semaphore + xSemaphoreGive( SemLevelsHandle ); + } } - } - - for(int j = 0; j < NUM_LED; j++){ - for(uint_fast8_t i = j; i< NUM_LED-j; i=i+8){ // TODO! DEBUGGEN! + // end take sem from IRQ - led.LED_set_RGB_32(i , RED ); - led.LED_set_RGB_32(i+1, WHITE ); - led.LED_set_RGB_32(i+2, PURPLE ); - led.LED_set_RGB_32(i+3, BLACK ); - led.LED_set_RGB_32(i+4, GREEN ); - led.LED_set_RGB_32(i+5, BLUE ); - led.LED_set_RGB_32(i+6, ORANGE ); - led.LED_set_RGB_32(i+7, TURQUOISE); - } - led.LED_transmit(); - vTaskDelay(100); -} - while(1){ - for(int i=0;i<num_colors;i++){ - led.LED_set_all_RGB_32(colors[i],1); - vTaskDelay(5); - led.LED_set_all_off(1); - vTaskDelay(5); + if (isRunning) { + // check matrix if set a color + // 3,7,11,15 = last elements in each row + uint8_t activeLEDs = 0; + if (led_matrix[3] > 0) activeLEDs += 1; + if (led_matrix[7] > 0) activeLEDs += 2; + if (led_matrix[11] > 0) activeLEDs += 4; + if (led_matrix[15] > 0) activeLEDs += 8; + if (activeLEDs > 0) xQueueSend(fromLEDMatrixHandle, &activeLEDs, (portTickType) 1); + // end check last row + } + + if (isRunning || scrollOut) { + // shift matrix to next LED in each row after vTaskDelay + for(uint8_t row = 0; row < FIELDS; row+=ROWS) { + for(uint8_t i = row+ROW4; i > row; i--) { + led_matrix[i] = led_matrix[i-1]; + //if (i%1 == 0) + led_matrix[i-1] = OFF; + } + } + // end shifting down + } + + if (isRunning) { + // checking queue for new incoming elements + matrix_s recvQueue; + if (xQueueReceive(toLEDMatrixHandle, &recvQueue, (portTickType) 10 ) == true) + { + // player lost, showing "ToT", reseting values + if (recvQueue.hasLost) { + const uint8_t say_tot[] = { + 1,9,10,11,12,13,14,17, // 8 + 20,21,25,28,35,38,42, // 7 + 43,46,49,50,51,52,53,54,62}; // 9 + led.LED_set_all_off(0); + const uint8_t say_tot_length = sizeof(say_tot) / sizeof(uint8_t) - sizeof(uint8_t); + for(uint8_t i=0; i < 8; i++) led.LED_set_RGB_32(say_tot[i], TURQUOISE); + for(uint8_t i=15; i <= say_tot_length; i++) led.LED_set_RGB_32(say_tot[i], RED); + for(uint8_t i=8; i < 8+8; i++) led.LED_set_RGB_32(say_tot[i], YELLOW); + led.LED_transmit(); + + isRunning = false; + delay = 250; + for(uint8_t i = 0; i < FIELDS; i++) led_matrix[i] = 0; // Reset game table + xSemaphoreGive( SemStartGameHandle ); + } + // end "hasLost" + + // set color if received a specific 1-bit + // first in row: 0, 4, 8, 12 + if (recvQueue.nextLED > 0) { + for(uint8_t i=ROW1; i <= ROW4; i++) { + uint8_t checkBit = 1 << i; + if ((recvQueue.nextLED & checkBit) == checkBit) { + // select a random color from color_array + uint32_t newColor = colors[rand() % num_colors]; + led_matrix[i*4] = newColor; + } + } + delay = recvQueue.delay; + } + // end set nextLED + xSemaphoreGive( SemLevelsHandle ); + } + // end queue check + } + // end isRunning + vTaskDelay(delay); } -} /* USER CODE END Task02 */ } @@ -706,125 +978,141 @@ void Validate(void *argument) points = 5 * i % 11; vTaskDelay(points * 50); - if(xSemaphoreTake(SemBtn1,10)) + if(xSemaphoreTake(SemBtn1Handle,10)) B1 = true; - if(xSemaphoreTake(SemBtn2,10)) + if(xSemaphoreTake(SemBtn2Handle,10)) B2 = true; - if(xSemaphoreTake(SemBtn3,10)) + if(xSemaphoreTake(SemBtn3Handle,10)) B3 = true; - if(xSemaphoreTake(SemBtn4,10)) + if(xSemaphoreTake(SemBtn4Handle,10)) B4 = true; switch(recv) { - case 1: + case 1: { if(B1 && !B2 && !B3 && !B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden - } + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + } + break; } case 2: { if(!B1 && B2 && !B3 && !B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden - } + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + } + break; } case 3: { if(B1 && B2 && !B3 && !B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden - } + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + } + break; } case 4: { if(!B1 && !B2 && B3 && !B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden - } + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + } + break; } case 5: { if(B1 && !B2 && B3 && !B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden - } + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + } + break; } case 6: { if(!B1 && B2 && B3 && !B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden - } + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + } + break; } case 7: { if(B1 && B2 && B3 && !B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden - } + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + } + break; } case 8: { if(!B1 && !B2 && !B3 && B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden - } + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + } + break; } case 9: { if(B1 && !B2 && !B3 && B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden - } + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + } + break; } case 10: { if(!B1 && B2 && !B3 && B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden - } + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + } + break; } case 11: { if(B1 && B2 && !B3 && B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden - } + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + } + break; } case 12: { if(!B1 && !B2 && B3 && B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden } + break; } case 13: { if(B1 && !B2 && B3 && B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden } + break; } case 14: { if(!B1 && B2 && B3 && B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden } + break; } case 15: { if(B1 && B2 && B3 && B4) { - xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden + xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden } + break; } default: { - xQueueSend(toDisplayQueue, "Dead", (portTickType)1); // Punkte ans Display senden + xQueueSend(toDisplayQueueHandle, 0, (portTickType)1); // Punkte ans Display senden + break; } } } @@ -833,6 +1121,41 @@ void Validate(void *argument) /* USER CODE END Validate */ } +/* USER CODE BEGIN Header_Display */ +/** +* @brief Function implementing the Task04 thread. +* @param argument: Not used +* @retval None +*/ +/* USER CODE END Header_Display */ +void Display(void *argument) +{ + /* USER CODE BEGIN Display */ + /* Infinite loop */ + for(;;) + { + int rec = 1; // Initialisierung mit 1 damit am Anfang nicht die Todesnachricht ausgegeben wird + int points = 0; + char punkte[] = "1000"; + if(xQueueReceive(toDisplayQueueHandle, &rec , (portTickType)0) == true) + { + points += rec; + punkte[0] = points / 100; + punkte[1] = (points %100) / 10; + punkte[2] = points % 10; + } + // LCD_init(); + // LCD_setCursor(0,0); + + // LCD_print(punkte); + if(rec == 0) + { + // LCD_print("You are dead"); + } + } + /* USER CODE END Display */ +} + /** * @brief Period elapsed callback in non blocking mode * @note This function is called when TIM7 interrupt took place, inside @@ -865,6 +1188,7 @@ void Error_Handler(void) __disable_irq(); while (1) { + } /* USER CODE END Error_Handler_Debug */ } diff --git a/F413_FreeRTOS_LED_Matrix_Game.ioc b/F413_FreeRTOS_LED_Matrix_Game.ioc index 79812ed7e595125c7521b96681f62a98fe2eabc5..3a25561d109294828e0b73ea8af163418255c7f2 100644 --- a/F413_FreeRTOS_LED_Matrix_Game.ioc +++ b/F413_FreeRTOS_LED_Matrix_Game.ioc @@ -11,11 +11,10 @@ Dma.TIM2_CH1.0.PeriphDataAlignment=DMA_PDATAALIGN_WORD Dma.TIM2_CH1.0.PeriphInc=DMA_PINC_DISABLE Dma.TIM2_CH1.0.Priority=DMA_PRIORITY_VERY_HIGH Dma.TIM2_CH1.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -FREERTOS.BinarySemaphores01=mySem,Dynamic,NULL FREERTOS.FootprintOK=true -FREERTOS.IPParameters=Tasks01,BinarySemaphores01,FootprintOK,configUSE_PREEMPTION,configUSE_OS2_TIMER,Queues01 -FREERTOS.Queues01=toLEDMatrix,16,matrix_s,0,Dynamic,NULL,NULL;fromLEDMatrix,16,matrix_s,0,Dynamic,NULL,NULL -FREERTOS.Tasks01=Task1,24,128,Task01,Default,NULL,Dynamic,NULL,NULL;Task2,24,128,Task02,Default,NULL,Dynamic,NULL,NULL;Task3,24,128,Task03,Default,NULL,Dynamic,NULL,NULL +FREERTOS.IPParameters=Tasks01,FootprintOK,configUSE_PREEMPTION,configUSE_OS2_TIMER,Queues01 +FREERTOS.Queues01=toLEDMatrix,16,matrix_s,0,Dynamic,NULL,NULL;fromLEDMatrix,16,matrix_s,0,Dynamic,NULL,NULL;toDisplayQueue,16,uint16_t,0,Dynamic,NULL,NULL +FREERTOS.Tasks01=Task1,24,128,Levels,Default,NULL,Dynamic,NULL,NULL;Task2,24,128,Task02,Default,NULL,Dynamic,NULL,NULL;Task3,24,128,Validate,Default,NULL,Dynamic,NULL,NULL;Task4,8,128,Display,Default,NULL,Dynamic,NULL,NULL FREERTOS.configUSE_OS2_TIMER=1 FREERTOS.configUSE_PREEMPTION=1 File.Version=6 @@ -33,39 +32,46 @@ Mcu.IP7=USB_OTG_FS Mcu.IPNb=8 Mcu.Name=STM32F413Z(G-H)Tx Mcu.Package=LQFP144 -Mcu.Pin0=PC13 -Mcu.Pin1=PC14-OSC32_IN -Mcu.Pin10=PG6 -Mcu.Pin11=PG7 -Mcu.Pin12=PC8 -Mcu.Pin13=PC9 -Mcu.Pin14=PA8 -Mcu.Pin15=PA9 -Mcu.Pin16=PA10 -Mcu.Pin17=PA11 -Mcu.Pin18=PA12 -Mcu.Pin19=PA13 -Mcu.Pin2=PC15-OSC32_OUT -Mcu.Pin20=PA14 -Mcu.Pin21=PC10 -Mcu.Pin22=PC11 -Mcu.Pin23=PD4 -Mcu.Pin24=PD5 -Mcu.Pin25=PD6 -Mcu.Pin26=PD7 -Mcu.Pin27=PB3 -Mcu.Pin28=PB7 -Mcu.Pin29=VP_FREERTOS_VS_CMSIS_V2 -Mcu.Pin3=PH0 - OSC_IN -Mcu.Pin30=VP_SYS_VS_tim7 -Mcu.Pin31=VP_TIM2_VS_ClockSourceINT -Mcu.Pin4=PH1 - OSC_OUT -Mcu.Pin5=PA0 -Mcu.Pin6=PB0 -Mcu.Pin7=PB14 -Mcu.Pin8=PD8 -Mcu.Pin9=PD9 -Mcu.PinsNb=32 +Mcu.Pin0=PE2 +Mcu.Pin1=PE4 +Mcu.Pin10=PH0 - OSC_IN +Mcu.Pin11=PH1 - OSC_OUT +Mcu.Pin12=PA0 +Mcu.Pin13=PB0 +Mcu.Pin14=PB14 +Mcu.Pin15=PD8 +Mcu.Pin16=PD9 +Mcu.Pin17=PG6 +Mcu.Pin18=PG7 +Mcu.Pin19=PC8 +Mcu.Pin2=PE5 +Mcu.Pin20=PC9 +Mcu.Pin21=PA8 +Mcu.Pin22=PA9 +Mcu.Pin23=PA10 +Mcu.Pin24=PA11 +Mcu.Pin25=PA12 +Mcu.Pin26=PA13 +Mcu.Pin27=PA14 +Mcu.Pin28=PC10 +Mcu.Pin29=PC11 +Mcu.Pin3=PE6 +Mcu.Pin30=PD4 +Mcu.Pin31=PD5 +Mcu.Pin32=PD6 +Mcu.Pin33=PD7 +Mcu.Pin34=PB3 +Mcu.Pin35=PB7 +Mcu.Pin36=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin37=VP_SYS_VS_tim7 +Mcu.Pin38=VP_TIM2_VS_ClockSourceINT +Mcu.Pin4=PC13 +Mcu.Pin5=PC14-OSC32_IN +Mcu.Pin6=PC15-OSC32_OUT +Mcu.Pin7=PF7 +Mcu.Pin8=PF8 +Mcu.Pin9=PF9 +Mcu.PinsNb=39 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F413ZHTx @@ -205,6 +211,34 @@ PD9.GPIO_Label=STLK_TX [STM32F103CBT6_PA2] PD9.Locked=true PD9.Mode=Asynchronous PD9.Signal=USART3_RX +PE2.GPIOParameters=GPIO_Label +PE2.GPIO_Label=LCD_D7 +PE2.Locked=true +PE2.Signal=GPIO_Output +PE4.GPIOParameters=GPIO_Label +PE4.GPIO_Label=LCD_D4 +PE4.Locked=true +PE4.Signal=GPIO_Output +PE5.GPIOParameters=GPIO_Label +PE5.GPIO_Label=LCD_D5 +PE5.Locked=true +PE5.Signal=GPIO_Output +PE6.GPIOParameters=GPIO_Label +PE6.GPIO_Label=LCD_D6 +PE6.Locked=true +PE6.Signal=GPIO_Output +PF7.GPIOParameters=GPIO_Label +PF7.GPIO_Label=LCD_RS +PF7.Locked=true +PF7.Signal=GPIO_Output +PF8.GPIOParameters=GPIO_Label +PF8.GPIO_Label=LCD_RW +PF8.Locked=true +PF8.Signal=GPIO_Output +PF9.GPIOParameters=GPIO_Label +PF9.GPIO_Label=LCD_E +PF9.Locked=true +PF9.Signal=GPIO_Output PG6.GPIOParameters=GPIO_Label PG6.GPIO_Label=USB_PowerSwitchOn [STMPS2151STR_EN] PG6.Locked=true diff --git a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvguix.Annika b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvguix.Annika index b137e5c9955c2a2141d1adbf3474d7da5dff0210..6b18d7f98ae575ec42e4b53d3cbba841e92f5d15 100644 --- a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvguix.Annika +++ b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvguix.Annika @@ -15,7 +15,7 @@ <View> <WinId>38003</WinId> <ViewName>Registers</ViewName> - <TableColWidths>115 67</TableColWidths> + <TableColWidths>120 120</TableColWidths> </View> <View> <WinId>346</WinId> @@ -93,8 +93,8 @@ <flags>2</flags> <showCmd>3</showCmd> <MinPosition> - <xPos>-32000</xPos> - <yPos>-32000</yPos> + <xPos>-1</xPos> + <yPos>-1</yPos> </MinPosition> <MaxPosition> <xPos>-1</xPos> @@ -111,7 +111,7 @@ <RegID>0</RegID> <MDITabState> <Len>342</Len> - <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000200000000000000010000003D443A5C746D705C50726F6A656B74655C4C45444D617472697847616D655C4C45445F4D61747269785F47616D655C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3D443A5C746D705C50726F6A656B74655C4C45444D617472697847616D655C4C45445F4D61747269785F47616D655C436F72655C496E635C6D61696E2E6800000000066D61696E2E6800000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000C40000006600000000060000B3020000</Data> + <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000200000000000000010000003D443A5C746D705C50726F6A656B74655C4C45444D617472697847616D655C4C45445F4D61747269785F47616D655C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3D443A5C746D705C50726F6A656B74655C4C45444D617472697847616D655C4C45445F4D61747269785F47616D655C436F72655C496E635C6D61696E2E6800000000066D61696E2E6800000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FE0000006600000000060000B2020000</Data> </MDITabState> </MDIClientArea> <ViewEx> @@ -150,7 +150,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000066000000BD00000083020000</Data> + <Data>0300000066000000F700000082020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -170,7 +170,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000066000000BD00000083020000</Data> + <Data>0300000066000000F700000082020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -450,7 +450,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000066000000BD00000083020000</Data> + <Data>0300000066000000F700000082020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -470,7 +470,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000066000000BD00000083020000</Data> + <Data>0300000066000000F700000082020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -490,7 +490,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>00000000B4020000000600000E030000</Data> + <Data>00000000B3020000000600000E030000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -530,7 +530,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000B7020000FD050000F5020000</Data> + <Data>03000000B6020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1150,7 +1150,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>0300000066000000BD00000083020000</Data> + <Data>0300000066000000F700000082020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1170,7 +1170,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000B7020000FD050000F5020000</Data> + <Data>03000000B6020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1190,7 +1190,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000B7020000FD050000F5020000</Data> + <Data>03000000B6020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1250,7 +1250,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000B7020000FD050000F5020000</Data> + <Data>03000000B6020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1270,7 +1270,7 @@ <RecentRowIndex>0</RecentRowIndex> <RectRecentDocked> <Len>16</Len> - <Data>03000000B7020000FD050000F5020000</Data> + <Data>03000000B6020000FD050000F5020000</Data> </RectRecentDocked> <RectRecentFloat> <Len>16</Len> @@ -1799,14 +1799,14 @@ </Window> <DockMan> <Len>3312</Len> - <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFC4000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000C40000006600000070040000D4000000C40000004F00000070040000BD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFAC0300004F000000B0030000A5010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000B00300006600000070040000BC010000B00300004F00000070040000A501000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFC00000004F000000C40000009C020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000C0000000B3020000000000004F000000C00000009C0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000AC010000700400002E0200000000000095010000700400001702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000009C02000000060000A0020000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000B7020000000600002503000000000000A0020000000600000E0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data> + <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFC4000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000C40000006600000070040000D4000000C40000004F00000070040000BD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFAC0300004F000000B0030000A5010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000B00300006600000070040000BC010000B00300004F00000070040000A501000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFFA0000004F000000FE0000009B0200000100000002000010040000000100000042FFFFFF37050000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000FA000000B2020000000000004F000000FA0000009B0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000AC010000700400002E0200000000000095010000700400001702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000009B020000000600009F02000001000000010000100400000001000000B8FDFFFF6C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000B60200000006000025030000000000009F020000000600000E0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data> </DockMan> <ToolBar> <RegID>59392</RegID> <Name>File</Name> <Buttons> - <Len>2591</Len> - <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000065461736B303396000000000000000400065461736B30330856616C69646174650B6D7953656D48616E646C650373656D00000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data> + <Len>2550</Len> + <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000046D79536596000000000000000100046D79536500000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data> </Buttons> <OriginalItems> <Len>1423</Len> @@ -1865,18 +1865,18 @@ <ActiveTab>0</ActiveTab> <Doc> <Name>../Core/Src/main.c</Name> - <ColumnNumber>11</ColumnNumber> - <TopLine>357</TopLine> - <CurrentLine>726</CurrentLine> + <ColumnNumber>1</ColumnNumber> + <TopLine>637</TopLine> + <CurrentLine>677</CurrentLine> <Folding>1</Folding> - <ContractedFolders>240,248,253,299,305,364,397,431,449,566,586</ContractedFolders> + <ContractedFolders>64,71,78,85,90</ContractedFolders> <PaneID>0</PaneID> </Doc> <Doc> <Name>../Core/Inc/main.h</Name> - <ColumnNumber>48</ColumnNumber> - <TopLine>111</TopLine> - <CurrentLine>133</CurrentLine> + <ColumnNumber>52</ColumnNumber> + <TopLine>123</TopLine> + <CurrentLine>140</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> diff --git a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvoptx b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvoptx index 5455992632e731e6bcbfd4f10bd6664875b41a1c..b3afcc6824590ad8b92ee06cc511c0ddf1fd53f2 100644 --- a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvoptx +++ b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvoptx @@ -152,7 +152,7 @@ <Bp> <Number>0</Number> <Type>0</Type> - <LineNumber>561</LineNumber> + <LineNumber>45</LineNumber> <EnabledFlag>1</EnabledFlag> <Address>0</Address> <ByteObject>0</ByteObject> @@ -168,7 +168,7 @@ <Bp> <Number>1</Number> <Type>0</Type> - <LineNumber>547</LineNumber> + <LineNumber>561</LineNumber> <EnabledFlag>1</EnabledFlag> <Address>0</Address> <ByteObject>0</ByteObject> @@ -184,7 +184,7 @@ <Bp> <Number>2</Number> <Type>0</Type> - <LineNumber>560</LineNumber> + <LineNumber>547</LineNumber> <EnabledFlag>1</EnabledFlag> <Address>0</Address> <ByteObject>0</ByteObject> @@ -200,7 +200,7 @@ <Bp> <Number>3</Number> <Type>0</Type> - <LineNumber>556</LineNumber> + <LineNumber>560</LineNumber> <EnabledFlag>1</EnabledFlag> <Address>0</Address> <ByteObject>0</ByteObject> @@ -216,6 +216,22 @@ <Bp> <Number>4</Number> <Type>0</Type> + <LineNumber>556</LineNumber> + <EnabledFlag>1</EnabledFlag> + <Address>0</Address> + <ByteObject>0</ByteObject> + <HtxType>0</HtxType> + <ManyObjects>0</ManyObjects> + <SizeOfObject>0</SizeOfObject> + <BreakByAccess>0</BreakByAccess> + <BreakIfRCount>0</BreakIfRCount> + <Filename>../Core/Src/main.c</Filename> + <ExecCommand></ExecCommand> + <Expression></Expression> + </Bp> + <Bp> + <Number>5</Number> + <Type>0</Type> <LineNumber>277</LineNumber> <EnabledFlag>1</EnabledFlag> <Address>0</Address> @@ -356,7 +372,7 @@ <Group> <GroupName>Application/User/Core</GroupName> - <tvExp>1</tvExp> + <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> <cbSel>0</cbSel> <RteFlg>0</RteFlg> @@ -436,7 +452,7 @@ <Group> <GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName> - <tvExp>1</tvExp> + <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> <cbSel>0</cbSel> <RteFlg>0</RteFlg> @@ -672,7 +688,7 @@ <Group> <GroupName>Drivers/CMSIS</GroupName> - <tvExp>1</tvExp> + <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> <cbSel>0</cbSel> <RteFlg>0</RteFlg> diff --git a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvprojx b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvprojx index f92f6d4ca07211edbda149be7e1cb4c821447524..244e387ad0fe3151a3ef2ff57ef8ca1a379a11ba 100644 --- a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvprojx +++ b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvprojx @@ -339,7 +339,7 @@ <MiscControls></MiscControls> <Define>USE_HAL_DRIVER,STM32F413xx</Define> <Undefine></Undefine> - <IncludePath>../Core/Inc; ../Drivers/STM32F4xx_HAL_Driver/Inc; ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy; ../Middlewares/Third_Party/FreeRTOS/Source/include; ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2; ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F; ../Drivers/CMSIS/Device/ST/STM32F4xx/Include; ../Drivers/CMSIS/Include</IncludePath> + <IncludePath>../Core/Inc; ../Drivers/STM32F4xx_HAL_Driver/Inc; ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy; ../Middlewares/Third_Party/FreeRTOS/Source/include; ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2; ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F; ../Drivers/CMSIS/Device/ST/STM32F4xx/Include; ../Drivers/CMSIS/Include</IncludePath> </VariousControls> </Cads> <Aads>