فهرست منبع

migrate, circular buffer

Juraj Ďuďák 1 ماه پیش
والد
کامیت
aa683f1a80
7فایلهای تغییر یافته به همراه112 افزوده شده و 23 حذف شده
  1. 2 2
      .cproject
  2. 9 0
      Core/Inc/AppBridge.h
  3. 91 11
      Core/Src/AppBridge.cpp
  4. 5 4
      Core/Src/NbusBridge.cpp
  5. 1 2
      Core/Src/stm32l4xx_hal_msp.c
  6. 3 3
      nbus-bridge.ioc
  7. 1 1
      nbus-bridge.launch

+ 2 - 2
.cproject

@@ -23,7 +23,7 @@
 							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.1227928016" name="Floating-point unit" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.value.fpv4-sp-d16" valueType="enumerated"/>
 							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.742081227" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
 							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1771995048" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="NUCLEO-L432KC" valueType="string"/>
-							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.763957344" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-L432KC || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32L4xx_HAL_Driver/Inc | ../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy | ../Drivers/CMSIS/Device/ST/STM32L4xx/Include | ../Drivers/CMSIS/Include ||  ||  || USE_HAL_DRIVER | STM32L432xx ||  || Drivers | Core/Startup | Core ||  ||  || ${workspace_loc:/${ProjName}/STM32L432KCUX_FLASH.ld} || true || NonSecure ||  || secure_nsclib.o ||  || None ||  ||  || " valueType="string"/>
+							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.763957344" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-L432KC || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32L4xx_HAL_Driver/Inc | ../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy | ../Drivers/CMSIS/Device/ST/STM32L4xx/Include | ../Drivers/CMSIS/Include ||  ||  || USE_HAL_DRIVER | STM32L432xx ||  || Drivers | Core/Startup | Core ||  ||  || ${workspace_loc:/${ProjName}/STM32L432KCUX_FLASH.ld} || true || NonSecure ||  || secure_nsclib.o ||  || None ||  ||  ||  || ::" valueType="string"/>
 							<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.1735522523" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="80" valueType="string"/>
 							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.353855851" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
 							<builder buildPath="${workspace_loc:/nbus-bridge}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1517028906" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
@@ -129,7 +129,7 @@
 							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.848253208" name="Floating-point unit" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.value.fpv4-sp-d16" valueType="enumerated"/>
 							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.384972999" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
 							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1032237909" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="NUCLEO-L432KC" valueType="string"/>
-							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.169894820" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-L432KC || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32L4xx_HAL_Driver/Inc | ../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy | ../Drivers/CMSIS/Device/ST/STM32L4xx/Include | ../Drivers/CMSIS/Include ||  ||  || USE_HAL_DRIVER | STM32L432xx ||  || Drivers | Core/Startup | Core ||  ||  || ${workspace_loc:/${ProjName}/STM32L432KCUX_FLASH.ld} || true || NonSecure ||  || secure_nsclib.o ||  || None ||  ||  || " valueType="string"/>
+							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.169894820" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-L432KC || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32L4xx_HAL_Driver/Inc | ../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy | ../Drivers/CMSIS/Device/ST/STM32L4xx/Include | ../Drivers/CMSIS/Include ||  ||  || USE_HAL_DRIVER | STM32L432xx ||  || Drivers | Core/Startup | Core ||  ||  || ${workspace_loc:/${ProjName}/STM32L432KCUX_FLASH.ld} || true || NonSecure ||  || secure_nsclib.o ||  || None ||  ||  ||  || ::" valueType="string"/>
 							<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.51564282" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="80" valueType="string"/>
 							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1056315067" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
 							<builder buildPath="${workspace_loc:/nbus-bridge}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1243358985" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>

+ 9 - 0
Core/Inc/AppBridge.h

@@ -22,12 +22,21 @@
 #include "stm32l0xx_hal.h"
 #endif
 
+#define PAYLOAD_SIZE 128
+#define META_SIZE 5
+#define BUFF_SIZE (PAYLOAD_SIZE + META_SIZE)*2
 
 #ifdef __cplusplus
 extern "C"
 {
 #endif
 
+typedef enum {
+    STATE_WAIT_LEN,
+    STATE_PAYLOAD,
+} ProtocolState;
+
+
 void app(UART_HandleTypeDef *, UART_HandleTypeDef *);
 
 #ifdef __cplusplus

+ 91 - 11
Core/Src/AppBridge.cpp

@@ -9,6 +9,8 @@
 #include "AppBridge.h"
 #include "NbusBridge.h"
 
+#define NBUS_UART_FRAME_TIMEOUT 5
+#define MAX_SYSTICK  0xFFFFFFFF
 
 /** @brief UARTinterface between Master-Bridge. */
 UART_HandleTypeDef *pUartMasterGlobal;
@@ -19,18 +21,34 @@ uint8_t pMasterUartRx[NBUS_APP_UART_FRAME_SIZE];
 /** @brief master buffer for pUartMasterGlobal. */
 uint8_t pMasterUartFrame[NBUS_APP_UART_FRAME_SIZE];
 /** @brief internal index for data acquisition from pUartMasterGlobal. */
-volatile uint8_t vMasterUartIndex;
+//volatile uint8_t vMasterUartIndex;
 /** @brief size of received request from pUartMasterGlobal. */
-volatile uint8_t vMasterUartSize;
+//volatile uint8_t vMasterUartSize;
 
+ProtocolState state = STATE_WAIT_LEN;
+volatile uint32_t uart_timeout = MAX_SYSTICK;
+volatile uint16_t rx_read_pos = 0; // DAM UART CIRCULAR - tail
+volatile uint8_t msg_len = 0;
+volatile uint8_t msg_idx = 0;
+uint8_t rx_ring_buffer[BUFF_SIZE];
+
+
+
+
+void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart){
+	HAL_UART_Receive_DMA(pUartMasterGlobal, rx_ring_buffer, BUFF_SIZE);
+}
 
 /** Initialize resources and provide boot sequence. */
 static void init_app()
 {
-    HAL_UARTEx_ReceiveToIdle_DMA(pUartMasterGlobal, pMasterUartRx, NBUS_APP_UART_FRAME_SIZE);
+    uart_timeout = HAL_GetTick();
+    rx_ring_buffer[0] = 0;
+    //HAL_UARTEx_ReceiveToIdle_DMA(pUartMasterGlobal, pMasterUartRx, NBUS_APP_UART_FRAME_SIZE);
+	HAL_UART_Receive_DMA(pUartMasterGlobal, rx_ring_buffer, BUFF_SIZE);
     flagUartMasterDataReady = 0;
-    vMasterUartIndex = 0;
-    vMasterUartSize = 0;
+//    vMasterUartIndex = 0;
+//    vMasterUartSize = 0;
 
     // boot long blink
     for (uint32_t i = 0; i < NBUS_APP_BLINK_COUNT; i++)
@@ -40,6 +58,65 @@ static void init_app()
     }
 }
 
+static uint8_t Parse_Protocol_Byte(uint8_t b) {
+
+	uint8_t packet_finished = 0;
+	// Timeout reset logic
+	if (state != STATE_WAIT_LEN) {
+		if ((HAL_GetTick() - uart_timeout) > NBUS_UART_FRAME_TIMEOUT){
+			state = STATE_WAIT_LEN;
+			msg_len = 0;
+			msg_idx = 0;
+		}
+	}
+
+    switch (state) {
+        case STATE_WAIT_LEN:
+            // Validácia dĺžky (max 128 bajtov, min 4 bajty)
+            if (b > 3 && b < PAYLOAD_SIZE) {
+                msg_len = b;
+                msg_idx = 0;
+                state = STATE_PAYLOAD;
+                uart_timeout = HAL_GetTick(); // Reset timeoutu
+            }
+            break;
+
+
+        case STATE_PAYLOAD:
+        	pMasterUartRx[msg_idx++] = b;
+        	uart_timeout = HAL_GetTick(); // Aktualizácia timeoutu pri každom bajte
+            if (msg_idx >= msg_len) { // Koniec paketu (podľa definície dĺžky)
+            	//nbus_cb_UART_RX(msg_idx);	// callback to nBus, notify message length
+                state = STATE_WAIT_LEN;
+                packet_finished = 1;
+                flagUartMasterDataReady = 1;
+            }
+            break;
+    }
+
+    return packet_finished;
+
+
+}
+
+static uint8_t process_UART_RingBuffer(void) {
+	// Zistíme, kde sa aktuálne nachádza DMA (Head)
+    // CNDTR register obsahuje počet ZOSTÁVAJÚCICH bajtov do konca buffra
+    uint16_t rx_dma_pos = BUFF_SIZE - __HAL_DMA_GET_COUNTER(pUartMasterGlobal->hdmarx);
+
+    while (rx_read_pos != rx_dma_pos) {
+        uint8_t byte = rx_ring_buffer[rx_read_pos];
+        rx_read_pos++;
+        if (rx_read_pos >= BUFF_SIZE) {
+            rx_read_pos = 0;
+        }
+
+        if( Parse_Protocol_Byte(byte) != 0){
+        	return 1;
+        }
+    }
+    return 0;
+}
 
 /**
  * Entrypoint of nBusBridge applicattion.
@@ -60,13 +137,13 @@ void app(UART_HandleTypeDef *uart_nbus, UART_HandleTypeDef *uart_master)
 
     while (1)
     {
-        bridge.processRunningState();
+    	if (process_UART_RingBuffer() != 0){
+    		bridge.processRequest(pMasterUartRx, msg_len);
+    		flagUartMasterDataReady = 0;
+    	}
+
+    	bridge.processRunningState();
 
-        if (flagUartMasterDataReady > 0)
-        {
-            bridge.processRequest(pMasterUartFrame, flagUartMasterDataReady);
-            flagUartMasterDataReady = 0;
-        }
     }
 }
 
@@ -74,6 +151,7 @@ void app(UART_HandleTypeDef *uart_nbus, UART_HandleTypeDef *uart_master)
 /**
  * @brief Application callback of STM32 HAL.
  */
+/*
 void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
 {
     if (huart == pUartMasterGlobal)
@@ -104,3 +182,5 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
         }
     }
 }
+
+*/

+ 5 - 4
Core/Src/NbusBridge.cpp

@@ -50,7 +50,7 @@ void NbusBridge::scanNetwork()
     {
         HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
         pdu.ma = i;
-
+//HAL_Delay(1);
         _worker_frame_ptr = _communicator->sendAndReceiveSlave(_makePacket(pdu, data, NBUS_BRIDGE_ECHO_SCAN_SIZE));
 
         if (!_worker_frame_ptr->IsEmpty())
@@ -64,6 +64,7 @@ void NbusBridge::scanNetwork()
                 _slaves[_num_slaves].setCommunicator(_communicator);
                 _slaves[_num_slaves].cmdGetSensorCnt(true); 	// retrieve sensor count for each slave
                 _num_slaves++;
+                //HAL_Delay(1);
             }
         }
     }
@@ -119,14 +120,13 @@ void NbusBridge::processRunningState()
 
     _worker_frame_ptr = _makeBridgeDataPacket();
 
-    // TODO problem: v stavi RUNNING pride STOP prikaz, ale ten sa nespracuje, pretoze bezi obsluha tejto funkcie.
     if (_run_state == STATE_RUNNING)
     {
         _communicator->sendToMaster(_worker_frame_ptr);
     }
 
     /// TODO toto sa MI NEPACI, TREBA VYRIESIT INAK!!!!!!
-    HAL_Delay(NBUS_BRIDGE_RUNNING_STATE_DELAY); // TREBA VYSKUSAT
+    //HAL_Delay(NBUS_BRIDGE_RUNNING_STATE_DELAY); // TREBA VYSKUSAT
 }
 
 uint8_t NbusBridge::_crc8x_fast(void const *mem, uint16_t len)
@@ -256,6 +256,7 @@ DataFrame * NbusBridge::_cmdGetFormat()
 		_default_frame.AddInt8(_slaves[i].getModuleAddress());
 		_worker_frame_ptr = _slaves[i].cmdGetFormat();
 		_default_frame.AddArray(&NBUS_RX_DATA0(_worker_frame_ptr->GetFrame() + 1), _worker_frame_ptr->GetLength() - (NBUS_RX_META_SIZE + 1)); // add without length byte
+		//HAL_Delay(5);
 	}
 
 	_default_frame.Commit();
@@ -365,7 +366,7 @@ void NbusBridge::_addDataPayload(DataFrame * data_frame)
 	{
 		data_frame->AddUint8(_slaves[i].getModuleAddress());
 		_worker_frame_ptr = _slaves[i].cmdGetData();
-
+HAL_Delay(1);
 		// check error state
 		if (_worker_frame_ptr->GetLength() < (NBUS_RX_META_SIZE + 1) || NBUS_CHECK_ERR_RESPONSE(_worker_frame_ptr->GetFrame() + 1))
 		{

+ 1 - 2
Core/Src/stm32l4xx_hal_msp.c

@@ -17,7 +17,6 @@
   ******************************************************************************
   */
 /* USER CODE END Header */
-
 /* Includes ------------------------------------------------------------------*/
 #include "main.h"
 /* USER CODE BEGIN Includes */
@@ -213,7 +212,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
     hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE;
     hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
     hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
-    hdma_usart2_rx.Init.Mode = DMA_NORMAL;
+    hdma_usart2_rx.Init.Mode = DMA_CIRCULAR;
     hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW;
     if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK)
     {

+ 3 - 3
nbus-bridge.ioc

@@ -29,7 +29,7 @@ Dma.USART2_RX.2.Direction=DMA_PERIPH_TO_MEMORY
 Dma.USART2_RX.2.Instance=DMA1_Channel6
 Dma.USART2_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE
 Dma.USART2_RX.2.MemInc=DMA_MINC_ENABLE
-Dma.USART2_RX.2.Mode=DMA_NORMAL
+Dma.USART2_RX.2.Mode=DMA_CIRCULAR
 Dma.USART2_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
 Dma.USART2_RX.2.PeriphInc=DMA_PINC_DISABLE
 Dma.USART2_RX.2.Priority=DMA_PRIORITY_LOW
@@ -72,8 +72,8 @@ Mcu.PinsNb=12
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserName=STM32L432KCUx
-MxCube.Version=6.16.0
-MxDb.Version=DB.6.0.160
+MxCube.Version=6.17.0
+MxDb.Version=DB.6.0.170
 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.DMA1_Channel4_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
 NVIC.DMA1_Channel5_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true

+ 1 - 1
nbus-bridge.launch

@@ -43,7 +43,7 @@
     <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_txt_serial_number" value=""/>
     <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.watchdog_config" value="none"/>
     <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlinkenable_rtos" value="false"/>
-    <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlinkrestart_configurations" value="{&quot;fVersion&quot;:1,&quot;fItems&quot;:[{&quot;fDisplayName&quot;:&quot;Reset&quot;,&quot;fIsSuppressible&quot;:false,&quot;fResetAttribute&quot;:&quot;Software system reset&quot;,&quot;fResetStrategies&quot;:[{&quot;fDisplayName&quot;:&quot;Software system reset&quot;,&quot;fLaunchAttribute&quot;:&quot;system_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset\r\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;Hardware reset&quot;,&quot;fLaunchAttribute&quot;:&quot;hardware_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset hardware\r\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;Core reset&quot;,&quot;fLaunchAttribute&quot;:&quot;core_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset core\r\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;None&quot;,&quot;fLaunchAttribute&quot;:&quot;no_reset&quot;,&quot;fGdbCommands&quot;:[],&quot;fCmdOptions&quot;:[&quot;-g&quot;]}],&quot;fGdbCommandGroup&quot;:{&quot;name&quot;:&quot;Additional commands&quot;,&quot;commands&quot;:[]},&quot;fStartApplication&quot;:true}]}"/>
+    <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlinkrestart_configurations" value="{&quot;fVersion&quot;:1,&quot;fItems&quot;:[{&quot;fDisplayName&quot;:&quot;Reset&quot;,&quot;fIsSuppressible&quot;:false,&quot;fResetAttribute&quot;:&quot;Software system reset&quot;,&quot;fResetStrategies&quot;:[{&quot;fDisplayName&quot;:&quot;Software system reset&quot;,&quot;fLaunchAttribute&quot;:&quot;system_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;Hardware reset&quot;,&quot;fLaunchAttribute&quot;:&quot;hardware_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset hardware\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;Core reset&quot;,&quot;fLaunchAttribute&quot;:&quot;core_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset core\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;None&quot;,&quot;fLaunchAttribute&quot;:&quot;no_reset&quot;,&quot;fGdbCommands&quot;:[],&quot;fCmdOptions&quot;:[&quot;-g&quot;]}],&quot;fGdbCommandGroup&quot;:{&quot;name&quot;:&quot;Additional commands&quot;,&quot;commands&quot;:[]},&quot;fStartApplication&quot;:true}]}"/>
     <booleanAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.enableRtosProxy" value="false"/>
     <stringAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyCustomProperties" value=""/>
     <stringAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyDriver" value="threadx"/>