Skip to main content

Introduction to Spain's Volleyball Superliga Women

Spain's Volleyball Superliga Women is one of the most thrilling and competitive leagues in Europe. With a rich history and a passionate fan base, this league showcases some of the finest talents in women's volleyball. Every match is an opportunity to witness exceptional skill, strategy, and sportsmanship. For enthusiasts and bettors alike, staying updated with daily matches and expert predictions is essential.

No volleyball matches found matching your criteria.

The Teams to Watch

The Spanish Volleyball Superliga features a diverse array of teams, each bringing unique strengths to the court. From seasoned veterans to rising stars, these teams offer thrilling performances that captivate audiences. Understanding team dynamics, player statistics, and historical performance can significantly enhance your betting strategy.

Daily Match Updates

Keeping up with daily matches is crucial for fans and bettors. Each game provides insights into team form, player fitness, and tactical adjustments. By following these updates closely, you can make informed decisions and enjoy the excitement of live volleyball action.

Expert Betting Predictions

Expert predictions are invaluable for those looking to place bets on volleyball matches. These predictions are based on comprehensive analysis of team performance, player statistics, head-to-head records, and other critical factors. By leveraging expert insights, you can increase your chances of making successful wagers.

Understanding Betting Strategies

  • Match Analysis: Delve into detailed match analysis to understand the strengths and weaknesses of each team.
  • Trend Identification: Identify trends in team performance that could influence match outcomes.
  • Risk Management: Develop strategies for managing risk when placing bets.
  • Betting Odds: Learn how to interpret betting odds and their implications on potential payouts.

The Role of Statistics in Volleyball Betting

Statistics play a pivotal role in shaping betting strategies for volleyball matches. Key metrics such as win-loss records, set scores, serve accuracy, and block efficiency provide valuable insights into team capabilities. Analyzing these statistics helps bettors make data-driven decisions.

Player Performance Insights

Individual player performance can significantly impact match outcomes. Tracking key players' statistics such as spikes per set, digs per set, and service aces can offer a deeper understanding of their influence on the game. Highlighting standout performers each season can guide betting choices.

Tactical Analysis of Matches

Tactical analysis involves examining how teams adapt their strategies during matches. This includes formations used, defensive setups, offensive plays, and adjustments made by coaches during games. Understanding these tactics can provide an edge in predicting match results.

Influence of Home Advantage

#ifndef _FSM_H_ #define _FSM_H_ #include "stm32f4xx_hal.h" #include "main.h" typedef enum { FSM_IDLE, FSM_BUSY, FSM_ERROR, } fsm_state_t; typedef enum { FSM_EVENT_NONE = 0x0000, FSM_EVENT_START = 0x0001, FSM_EVENT_STOP = 0x0001 << 1, FSM_EVENT_RESET = (FSM_EVENT_STOP | FSM_EVENT_START), } fsm_event_t; typedef struct { fsm_state_t state; fsm_event_t event; uint32_t counter; } fsm_status_t; typedef struct { void (*Init)(void); void (*Deinit)(void); void (*Event)(fsm_event_t event); void (*Tick)(void); } fsm_type_def; extern fsm_status_t g_fsmStatus; #endif /* _FSM_H_ */ <|repo_name|>luisvillarreal/STM32F4<|file_sep## STM32F4 Discovery ### Description This repository contains my work with the STM32F4 Discovery board. I will be using it to learn about microcontrollers programming. ### What I will be doing * I will start from scratch with no knowledge about microcontrollers programming. * I will use `STM32CubeMX` to generate initial code (based on HAL library). * I will learn about Cortex M processors (ARM architecture). * I will learn about interrupts (NVIC), timers (SysTick), ADCs... * I will learn about `FreeRTOS`. * I will try to implement some algorithms related with signal processing. * Finally... Let's see what happens! ### Setup In order to compile this project you need: - **GCC ARM Embedded** compiler suite: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads - **STM32CubeMX** tool: https://www.st.com/en/development-tools/stm32cubemx.html - **OpenOCD** tool: http://openocd.org/ - **GDB** debugger: https://www.gnu.org/software/gdb/ #### Windows Setup - Install all the tools listed above. - Add paths for GCC ARM Embedded tools: - GDB: `C:Program FilesGNU Tools ARM Embedded9 2019-q4-majorbin` - Compiler suite: `C:Program FilesGNU Tools ARM Embedded9 2019-q4-majorbin` - Add path for OpenOCD tool: - OpenOCD: `C:Program FilesOpenOCD` #### Linux Setup For Ubuntu we recommend installing packages through apt: bash sudo apt install gcc-arm-none-eabi gdb-multiarch openocd To add GDB path: bash export PATH=$PATH:/usr/bin/arm-none-eabi-gdb To add OpenOCD path: bash export PATH=$PATH:/usr/bin/openocd #### Flashing Firmware using STM32CubeProg 1) Download [STM32CubeProg](https://www.st.com/en/development-tools/stm32cubeprog.html) from ST website. ![Download STM32CubeProg](./docs/stm32cubeprog_download.png) ![STM32CubeProg Downloaded](./docs/stm32cubeprog_downloaded.png) ![Unzip STM32CubeProg](./docs/stm32cubeprog_unzip.png) ![STM32CubeProg Unzipped](./docs/stm32cubeprog_unzipped.png) ![STM32CubeProg Executable](./docs/stm32cubeprog_executable.png) --- Once installed we can use it for flashing firmware into our board. ![Connect Board](./docs/stm32746g_discovery_connected.png) ![Run Program](./docs/stm32746g_discovery_run_program.png) --- ### Useful links [Official documentation](https://www.st.com/content/st_com/en/products/microcontrollers-microprocessors/stm8-arm-cortex-m-mcus/stm-mcu-cortex-m3-stmicroelectronics/stm324xg_eval.aspx). [Reference Manual Datasheet PDFs](https://www.st.com/resource/en/reference_manual/dm00115998.pdf). [User Manual Datasheet PDFs](https://www.st.com/resource/en/user_manual/dm00113688.pdf). [Discovery User Manual Datasheet PDFs](https://www.st.com/resource/en/user_manual/dm00223008.pdf). [Discovery Reference Manual Datasheet PDFs](https://www.st.com/resource/en/reference_manual/dm00219599.pdf). [Discovery Schematic Datasheet PDFs](https://www.st.com/resource/en/schematic_pack/me00509497.pdf). [Discovery Pinout Datasheet PDFs](https://www.st.com/resource/en/packme/me00509498.pdf). [Nucleo Board Reference Manual Datasheet PDFs](https://www.st.com/content/ccc/resource/technical/document/reference_manual/group0/c7/f5/a6/bb/e6/8a/c5/DM00114210.pdf/files/DM00114210.pdf/jcr:content/translations/en.DM00114210.pdf). [Nucleo Board Schematic Datasheet PDFs](https://www.st.com/content/ccc/resource/technical/document/schematic_pack/group0/c7/f5/a6/bb/e6/8a/c5/mj00436151/files/mj00436151.pdf/jcr:content/translations/en.mj00436151.pdf). [Nucleo Board Pinout Datasheet PDFs](https://www.st.com/content/ccc/resource/technical/document/user_manual/group0/f3/bf/ec/a3/ba/e7/d5/d7/DQFP48R-Pin_Layout_v21_revA_191122.PDF/files/DQFP48R-Pin_Layout_v21_revA_191122.PDF/jcr:content/translations/en.DQFP48R-Pin_Layout_v21_revA_191122.PDF). [STM32146G-DISCOVERY Pinout PDF file generated using [pinout.xyz]](pinouts/pinout_STM32146G_DISCOVERY_pinout.xyz.svg). You may find it useful if you want to create schematics or PCB layouts using KiCAD or EAGLE. --- ## License This project is licensed under MIT license - see [LICENSE.md](LICENSE.md) file for details.<|repo_name|>luisvillarreal/STM32F4<|file_sep freertos_config.h /* * FreeRTOS V9.x - Copyright (C) Real Time Engineers Ltd. * All rights reserved * * VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. * * This file is part of FreeRTOS. * * FreeRTOS is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License (version 2) as published by the * Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. ***NOTE*** The exception to the GPL is included to allow you to distribute a compiled version of FreeRTOS without sources. See section 3.1 of the license for full details. * * FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. *************************************************************************** ***!PORTING NOTE!************************************************************************************* * If you are porting between compilers or architectures then please take special care * when reviewing this file as some changes may be required. *************************************************************************************END PORTING NOTE***! */ /* ********************************************************************************************************* * * Configuration settings specific to this port which must be modified before use. * ********************************************************************************************************* */ #ifndef FREERTOS_CONFIG_H #define FREERTOS_CONFIG_H /* ------------------- DEFINES USED BY THE PORT AND KERNEL ------------------- */ #define configCPU_CLOCK_HZ ((uint64_t) SystemCoreClock) #define configTICK_RATE_HZ ((TickType_t)100) /* Define configTOTAL_HEAP_SIZE if required - see 'FreeRTOS API' documentation page 'Heap Implementation Details' If not defined then heap implementation assumes there is an infinite amount of memory available */ /* #define configTOTAL_HEAP_SIZE ((size_t)(10240)) */ /* Define configUSE_PREEMPTION if required - see 'FreeRTOS API' documentation page 'Task Management Functions' */ #define configUSE_PREEMPTION (1) /* Define configMAX_PRIORITIES if required - see 'FreeRTOS API' documentation page 'Task Management Functions' Note that setting this value higher than portCONSOLE_UART_MAX_PRIORITIES may result in priority inversion problems */ #define configMAX_PRIORITIES (configCONSOLE_UART_MAX_PRIORITIES + portNUM_PROCESSORS) /* Define configMINIMAL_STACK_SIZE if required - see 'FreeRTOS API' documentation page 'Task Management Functions' Note that tasks created using xTaskCreate() have their own stack size specified separately */ #define configMINIMAL_STACK_SIZE ((uint16_t)256) /* Define configIDLE_SHOULD_YIELD if required - see 'FreeRTOS API' documentation page 'Idle Task Functionality' Note that setting this parameter does not guarantee context switches occur at every tick interrupt */ #define configIDLE_SHOULD_YIELD (1) /* Define configUSE_MUTEXES if required - see 'FreeRTOS API' documentation page 'Mutexes' */ #define configUSE_MUTEXES (1) /* Define configQUEUE_REGISTRY_SIZE if required - see 'FreeRTOS API' documentation page 'Queue Management Functions' Note that queue registries are used only when queues are created from inside an ISR */ #define configQUEUE_REGISTRY_SIZE ((unsigned portBASE_TYPE)10) /* Set up time slicing between tasks having equal priority according to RTOS tutorial #23: http://www.freertos.org/tutorials/timers.html#time-slicing-between-tasks-of-the-same-priority */ #if( tskIDLE_PRIORITY == tskNO_AFFINITY ) #define portTICK_TYPE_IS_INT /* define portTICK_TYPE_IS_INT so macros don't shift ticks unnecessarily */ #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() #else /* tskIDLE_PRIORITY != tskNO_AFFINITY */ #undef portTICK_TYPE_IS_INT /* undefine portTICK_TYPE_IS_INT so macros do shift ticks appropriately */ #if( tskIDLE_PRIORITY > tskNO_AFFINITY ) #error "Invalid idle task priority" #endif #if( !configUSE_TIME_SLICING ) #error "Time slicing disabled" #endif #ifdef __CC_ARM /* Keil MDK */ # pragma anon_unions /* Enable anonymous unions which map struct bit-fields onto single words */ #endif typedef uint16_t TickTypeBits; typedef struct { TickTypeBits ticks; TickTypeBits dummy; /* Make sure structure has multiple words so timer has enough bits for delay periods longer than max tick period*/ } TickType; extern const TickType gptTicksPerSecond; extern void configureTimerForRunTimeStats(void); #endif /* ********************************************************************************************************* * TASK PRIORITIES ********************************************************************************************************* */ #if( tskNO_AFFINITY == (tskNO_AFFINITY & (~tskNO_AFFINITY)) ) /*lint !e961 MISRA rule violation intentional here because we want unsigned math */ #error "tskNO_AFFINITY should be set such that its lowest bit equals zero" #endif /* ********************************************************************************************************* * TASK STACK POINTERS ********************************************************************************************************* */ #if( sizeof(StackType_t *) == sizeof(void *) ) # define STACK_GROWTH_DONT_CARE ((StackType_t *)0) #elif( sizeof(StackType_t *) > sizeof(void *) ) # define STACK_GROWTH_DONT_CARE ((StackType_t *)(~((size_t)0)) #else /* sizeof(StackType_t *) == sizeof(void *) */ # define STACK_GROWTH_DONT_CARE ((StackType_t *)(~((size_t)0)) #endif /* ********************************************************************************************************* * CPU AND RTOS COUNTING TICKS ********************************************************************************************************* */ #ifndef portTICK_TYPE_IS_INT /* Determine whether tick type should be int or long based upon number cpu cycles per second divided by number RTOS ticks per second */ # if( (((uint64_t)((double)configCPU_CLOCK_HZ / ((double)configTICK_RATE_HZ))) >> ((sizeof(TickType)-1)*8)) > (~(TickType)-1UL)) # define portTICK_TYPE_IS_INT /* COUNTERS MAY OVERFLOW IF TICK TYPE IS NOT INT */ # endif #endif /* ********************************************************************************************************* * TASK MANAGEMENT FUNCTIONS ********************************************************************************************************* */ #ifndef INCLUDE_vTaskPrioritySet /* Allow vTaskPrioritySet() function access unless explicitly excluded via compiler switch */ extern void vTaskPrioritySet(TaskHandle_t xTaskToSet, UBaseType_t uxNewPriority); #endif /* ********************************************************************************************************** TIMER MANAGEMENT FUNCTIONS ********************************************************************************************************** */ #ifndef INCLUDE_xTimerPendFunctionCall /* Allow xTimerPendFunctionCall() function access unless explicitly excluded via compiler switch */ extern TimerHandle_t xTimerPendFunctionCall(TickFunctionPtr pxFunctionToCall, TickType xTicksToWait, void *pvParameter); #endif /* ******************************************************************************************************* QUEUE MANAGEMENT FUNCTIONS ******************************************************************************************************* */ #ifndef INCLUDE_xQueueGetMutexHolder /* Allow xQueueGetMutexHolder() function access unless explicitly excluded via compiler switch */ extern TaskHandle_t xQueueGetMutexHolder(QueueHandle_t xQueue); #endif /****************************************************************************************************/ /******************************************** END OF FILE ************************************************/ /****************************************************************************************************/ #endif /* FREERTOS_CONFIG_H */ <|repo_name|>luisvillarreal/STM32F4<|file_sep>#include "stm32746g_discovery_lcd.h" #include "stm32746g_discovery.h" static uint16 LCD_PixelBuffer[LCD_PIXEL_WIDTH][LCD_PIXEL_HEIGHT]; static volatile uint8 lcd_status = LCD_OK; static volatile uint8 lcd_error_code = LCD_NO_ERROR; /** ****************************************************************************** * @brief Write data into LCD controller registers * * @param[in] cmd : Command register address * ****************************************************************************** */ static void write_command(uint16 cmd) { LCD_REG_CMD_ADDRESS(LCD_IOTYPE); LCD_DATA_PORT->ODR &= ~LCD_DATA_MASK; LCD_DATA_PORT->ODR |= (((cmd & LCD_CMD_MASK)<BSRR |= LCD_RS_CLEAR | LCD_WR_SET | LCD_RD_CLEAR; LCD_CTRL_PORT->BRR |= LCD_WR_CLEAR; } /** ****************************************************************************** * @brief Write data into LCD controller registers * * @param[in] data : Data register address * ****************************************************************************** */ static void write_data(uint16 data) { LCD_REG_DATA_ADDRESS(LCD_IOTYPE); LCD_DATA_PORT->ODR &= ~LCD_DATA_MASK; LCD_DATA_PORT->ODR |= (((data & LCD_DATA_MASK)<BSRR |= LCD_RS_SET | LCD_WR_SET | LCD_RD_CLEAR; LCD_CTRL_PORT->BRR |= LCD_WR_CLEAR; } /** ****************************************************************************** * @brief Delay execution time * ****************************************************************************** */ static void delay(volatile uint16 i) { for(; i != 0; i--); } /** ****************************************************************************** * @brief Initialize GPIO pins * ****************************************************************************** */ static void gpio_init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOH|RCC_AHB1Periph_GPIOI|RCC_AHB1Periph_GPIOJ|RCC_AHB1Periph_GPIOK , ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_LCD_CS | GPIO_Pin_LCD_RST | GPIO_Pin_LCD_RS | GPIO_Pin_LCD_WR | GPIO_Pin_LCD_RD | GPIO_Pin_LCD_BKLT ; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT ; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP ; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz ; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOH,&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_LCD_DC ; GPIO_Init(GPIOI,&GPIO_InitStruct); GPIO_SetBits(GPIOH,(GPIO_Pin_LCD_CS | GPIO_Pin_LCD_RST | GPIO_Pin_LCD_RS | GPIO_Pin_LCD_WR | GPIO_Pin_LCD_RD | GPIO_Pin_LCD_BKLT)); delay(50000); //Delay needed after reset high before configuring display write_command(LCD_SWRESET); //Reset display controller delay(150000); //Delay needed after reset command before configuring display write_command(LCD_SLPOUT); //Display out from sleep mode delay(50000); //Delay needed after slpo out command before configuring display write_command(LCD_NORON); //Normal Display mode ON delay(50000); //Delay needed after normal display mode ON command before configuring display write_command(LCD_INVOFF); //Display inversion OFF write_command(LCD_MADCTL(MADCTL_MX|MADCTL_MY|MADCTL_RGB)); write_command(LCD_COLMOD(COLMOD_RGB565)); //Display color mode RGB565 write_command(LCD_VSCRSADD(Default_VSCRStart_Address)); write_command(LCD_DISCTRL(DISPLAY_ON)); write_data(Default_DBC_ScanLimit); } /** ****************************************************************************** * @brief Draw pixel at coordinates X,Y * ****************************************************************************** */ void BSP_Lcd_DrawPixel(uint16 Xpos,uint16 Ypos,uint16 Color) { if(Xpos >=LCD_PIXEL_WIDTH || Ypos >=LCD_PIXEL_HEIGHT)return ; LCD_PixelBuffer[Xpos][Ypos] = Color ; uint16 BufferIndex_Xstart=(Xpos>>6)<<7 ;//Calculate first index position Xstart= Xpos>>6 <<7 uint8 LineCounter=(((Xpos&63)+7)>>3);//Calculate line counter LineCounter=((XPos&63)+7)>>3 uint8 BitMask=(~((~0)<<((Xpos&63)&7))) ;//Calculate BitMask BitMask=~(~0)<<((XPos&63)&7)) if(Ypos & BIT_SET)//Check Y pos odd or even BufferIndex_Xstart+=(LineCounter>>3)*LCD_FRAME_BUFFER_LINE_LENGTH;//If odd increment index position BufferIndex_Xstart+=LineCounter>>3 <<11 BufferIndex_Xstart+=(Ypos>>3)*LCD_FRAME_BUFFER_LINE_LENGTH;//Increment index position BufferIndex_Xstart+=(YPos>>3)<<11 if(Ypos & BIT_SET)//Check Y pos odd or even BufferIndex_Xstart+=LineCounter&(~BIT_SET);//If odd increment index position BufferIndex_Xstart+=LineCounter&(~BIT_SET) while(LineCounter--)//Loop until Line Counter down counter reaches zero { *((volatile uint16*)(FrameBuffer+BufferIndex_Xstart))|=Color<<(((~BitMask)&BitMask)?BitMask:(~BitMask));//Write Color left shifted BitMask *((volatile uint16*)(FrameBuffer+BufferIndex_Xstart+2048))|=Color>>(BitMask?BitMask:(~BitMask));//Write Color right shifted (~BitMask) BufferIndex_Xstart++; *((volatile uint16*)(FrameBuffer+BufferIndex_Xstart))|=Color<<(((~BitMask)&BitMask)?BitMask:(~BitMask));//Write Color left shifted Bitmask *((volatile uint16*)(FrameBuffer+BufferIndex_Xstart+2048))|=Color>>(BitMask?BitMask:(~BitMask));//Write Color right shifted (~Bitmask) BufferIndex_Xstart++; } } /** ****************************************************************************** * @brief Clear screen buffer with given color * ****************************************************************************** */ void BSP_Lcd_Clear(uint16 Color) { int i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,e,f,g,h,i_; for(k=0;k>3);x++)//Loop over all bytes within line for(int z=2048;z<4096;z++)//Loop over both frames within line do{*((volatile uint16*)(FrameBuffer+z+Buffer_Index))=*(((uint16*)(&LCD_PixelBuffer[x][y])));}while(z-=2048);//Copy pixel buffer content into frame buffer content Buffer_Index+=128;//Increment Index Position } /** ****************************************************************************** * @brief Initialize Display controller * ****************************************************************************** */ void BSP_Lcd_Init(void) { gpio_init(); BSP_Lcd_Clear(BLACK_COLOR); } /** ****************************************************************************** * @brief Get status code * ****************************************************************************** */ uint8 BSP_Lcd_Get_Status(void) { return lcd_status; } /** ****************************************************************************** * @brief Get error code * ****************************************************************************** */ uint8 BSP_Lcd_Get_Error_Code(void) { return lcd_error_code; }<|file_sep#!/usr/bin/env python3 import os.path def main(): path_to_project_dir=os.path.dirname(os.path.abspath(__file__)) print(path_to_project_dir) if __name__ == '__main__': main()<|repo_name|>luisvillarreal/STM32F4<|file_sep hellomake.py.in.cmake.in @PACKAGE_INIT@ set_and_check() { set("@PACKAGE_TARNAME@" "@PACKAGE_VERSION@") if(NOT "${@PACKAGE_TARNAME@}_FOUND") set("@PACKAGE_TARNAME@""_FOUND" TRUE PARENT_SCOPE) set("@PACKAGE_TARNAME@" "@PACKAGE_VERSION@" PARENT_SCOPE) } set_and_check() check_required_components("@PROJECT_NAME@") include("${CMAKE_CURRENT_LIST_DIR}/hellomakeTargets.cmake") get_target_property(_IMPORT_PREFIX hellomake::hellomake IMPORTED_LOCATION_RELEASE) if(NOT _IMPORT_PREFIX STREQUAL "") set(hellomake_INCLUDE_DIRS "${_IMPORT_PREFIX}/include") endif() list(APPEND hellomake_LIBRARIES hellomake::hellomake)<|repo_name|>luisvillarreal/STM32F4<|file_sepidio/src/main.c #include "stm32746g_discovery.h" #include "stm32746g_discovery_lcd.h" #include "stm32746g_discovery_ts.h" int main() { BSP_LED_Init(LED_GREEN); BSP_LED_Off(LED_GREEN); BSP_TS_Init(BSP_JOYSTICK_SEL); BSP_TS_State tsState; while(true){ tsState=BSP_TS_Get_State(); if(tsState.touchDetected){ switch(tsState.touchEvent){ case TS_TOUCH_DOWN: break; case TS_TOUCH_UP: break; case TS_TOUCH_MOVE: break; default: break; BSP_LED_Toggle(LED_GREEN); if(tsState.touchDetected){ static int step=STEP_INIT; switch(step){ case STEP_INIT: BSP_LED_On(LED_GREEN); step++; break; case STEP_WAIT: if(tsState.touchDetected){ tsState=BSP_TS_Get_State(); tsPoint.x=tsState.xPosition>>TS_TOUCH_SHIFT_POSITION_VALUE; tsPoint.y=tsState.yPosition>>TS_TOUCH_SHIFT_POSITION_VALUE; tsPoint.z=(tsState.zPosition<>TS_TOUCH_SHIFT_POSITION_VALUE; BSP_Lcd_DrawPixel(tsPoint.x,(tsPoint.y),(BLUE_COLOR)); step++; break; case STEP_SEND_BUFFER: BSP_Lcd_Send_Buffer(); step++; break; default: step=STEP_INIT; break; } } } } }<|repo_name|>luisvillarreal/STM32F4<|file_sep持续集成CI的概念与实践(一):持续集成CI概述及其工具链介绍.md 持续集成(Continuous Integration,CI)是软件开发中的一个重要概念。它是指在软件开发过程中,每当有新的代码提交到版本控制系统后,自动触发构建和测试流水线,以保证代码质量和项目整体的健康状态。通过持续集成,可以及时发现并修复代码中的问题,提高团队协作效率。 以下是一些常用的持续集成工具链: Git:Git是一个分布式版本控制系统,用于管理代码版本和协作开发。在使用Git进行版本控制后,可以将代码提交到远程仓库(如GitHub、GitLab、Gitee等),从而为持续集成提供基础。 Jenkins:Jenkins是一个开源的持续集成工具,用于自动化构建、测试和部署软件项目。它支持多种编程语言和构建工具,并提供丰富的插件生态系统。 Travis CI:Travis CI是一个基于云端的持续集成服务,支持多种编程语言和平台。它与GitHub紧密结合,可以自动触发构建和测试流水线。 CircleCI:CircleCI也是一个基于云端的持续集成服务,支持多种编程语言和平台。它提供了灵活的配置选项,并支持多节点并行构建。 GitLab CI:GitLab CI是GitLab平台内置的持续集成服务。它与GitLab仓库紧密结合,在同一平台上进行代码管理和自动化流水线构建。 这些工具链通常需要配合其他辅助工具使用,例如: 编译器或构建工具:根据项目所用语言选择相应的编译器或构建工具(如Make、Gradle、Maven等),以生成可执行文件或包。 测试框架:选择适合项目所用语言的测试框架(如JUnit、pytest等),以进行单元测试、功能测试等。 报告生成工具:使用报告生成工具(如JUnit Report、Allure等)生成详细的测试报告,并将其与其他相关信息一起发送给开发人员。 虽然这些工具链各有特点,但总体来说它们都能帮助团队实现更高效地协作开发,并保证代码质量。 <|repo_name|>luisvillarreal/STM32F4<|file_sepproject xmlns="http://eclipse.org/ns/proposal/project/v200505" version="200"> /opt/workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/hellomake_cmake/.settings; C/C++ General Macros.ini=${prefix}/org.eclipse.cdt.core.macro.file} xsd:/org/netbeans/modules/editor/wizards/org-netbeans-modules-editor-wizards-format.xml/format_wizard.xml;/wizards/format_wizard.xml!/wizard-handler.xml!/wizard-handler.xml!/pagehandler.xml!/pagehandler.xml!/finishhandler.xml!/finishhandler.xml! true true true true true true true<|repo_name|>luisvillarreal/STM32F4<|file_sep[,{'kind': {'name': '.Project', 'type': 'object'}, '_id': '/api/workspace/projects/hellomake_cmake', '_type': '/api/workspace/projects/', '_etag': '"9ee53d57"', '_uri': '/api/workspace/projects/hellomake_cmake', '_permissions': [{'kind': {'name': '.Permission', 'type': 'object'}, '_id': '/api/workspace/projects/hellomake_cmake/-anonymous-', '_type': '/api/workspaces/-workspace-/permissions/-anonymous-', '_etag': '"73796ef9"', '_uri': '/api/workspace/projects/hellomake_cmake/-anonymous-', '_properties': [{'name': '$fullPath', '$type': {'name': '.StringProperty', 'type': 'object'}, '_value': '/home/lvs/gitlab/lab_studio/lab_studio_workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/hellomake_cmake'}, {'name': '$item-type', '$type': {'name': '.StringProperty', 'type': 'object'}, '_value'}]}, {'kind': {'name':''.Permission','type':'object'},'_id':'/'.workspace.projects.hellomake_cmake/-user-lvs-/','_type':'/'.workspaces/-workspace-/permissions/-user-lvs-/','_$etage''':'''47ccfc38''','_$uri':'/'.workspace.projects.hellomake_cmake/-user-lvs-/','_$properties':[{'name':''$fullPath','$type':{'name':''.StringProperty','type':''.object'}},{'value':'''/home/lvs/gitlab/lab_studio/lab_studio_workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/hellomake_cmake''},{'name':''$item-type','$typ':{'na' me:''.StringProperty','type':''.object'}},{'value':''''}]},{'kind':{'name':'''.Permission','typ':''.object'}},'_'id':''/'.workspace.projects.hellomake_cmakel'-anonymous-admin-''_'typ:'''.workspaces/-workspace-/permissions/-anonymous-admin-'_'_$etage:''''52e88f31'''_'_$uri':'''.workspace.projects.hellome_makecmakel'-anonymous-admin-'_'_$properties':[{'nam:''$fullPath','$typ':{'nai' me:''.StringProperty','typ':''.object'}},{'valie':'''/home/lvs/gitlab/lab_studio/lab_studio_workspace/.metadata/.plugins/org.eclipscore.resources/.projects/hello_makecmakel'},{'nam:''$item-type','$typ':{'nami.'StringProperti'typ.'objec'}}}}],'buildSpec': {'specFileURI':'''/home/lvs/gitlab/lab_studio/lab_studio_workspace/hello_makecmakel/build-spec.json''}','buildSpecURI':'''/home/lvs/gitlab/lab_studio/lab_studio_workspace/hello_makecmakel/build-spec.json''}','locationURI':'''/home/lvs/gitlab/lab_studio/lab_studio_workspace/hello_makecmakel/'','locationURIs':[''/home/lvs/gitlab/lab_studiolab_sutdio_workspacchello_makecmakel/''],'projectName:''hello_makcmke,''rootFolderLocationURI:'''/home/lvs/gitlab/' 'laboratorio_lab_sutdio_workspacchello_makecmakel/'},'parentFolderLocationURI:'null'} ] ['{"kind":{"nma":"Project","tpe":"obect"},"_id":"/ap i/workspacce/projecctshello_mackekamke","_tp":"/