diff --git a/.cproject b/.cproject
index 02fd60d..7cf18ef 100644
--- a/.cproject
+++ b/.cproject
@@ -23,6 +23,7 @@
+
@@ -57,10 +58,12 @@
+
+
-
-
-
+
+
+
@@ -110,6 +113,7 @@
+
@@ -218,6 +222,7 @@
+
diff --git a/.gitignore b/.gitignore
index f240e72..421a571 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
Debug/
+ThreadX_Test Debug.launch
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index 8954df7..da167f4 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -16,7 +16,7 @@
-
+
diff --git a/.settings/stm32cubeide.project.prefs b/.settings/stm32cubeide.project.prefs
index ec5d4ba..9a73229 100644
--- a/.settings/stm32cubeide.project.prefs
+++ b/.settings/stm32cubeide.project.prefs
@@ -1,4 +1,5 @@
+2F62501ED4689FB349E356AB974DBE57=E28E9ADA8844289BA4C9F2B226092C93
66BE74F758C12D739921AEA421D593D3=1
-8DF89ED150041C4CBC7CB9A9CAA90856=EA9A7E9E5AC8D9468AB4F8E784208102
-DC22A860405A8BF2F2C095E5B6529F12=EA9A7E9E5AC8D9468AB4F8E784208102
+8DF89ED150041C4CBC7CB9A9CAA90856=E28E9ADA8844289BA4C9F2B226092C93
+DC22A860405A8BF2F2C095E5B6529F12=A68C7E7603A475B97C64AD650453EC7C
eclipse.preferences.version=1
diff --git a/Core/Inc/stm32_assert.h b/Core/Inc/stm32_assert.h
index ce166a2..5f248c9 100644
--- a/Core/Inc/stm32_assert.h
+++ b/Core/Inc/stm32_assert.h
@@ -16,13 +16,12 @@
******************************************************************************
*/
/* USER CODE END Header */
-
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32_ASSERT_H
#define __STM32_ASSERT_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Exported types ------------------------------------------------------------*/
@@ -38,11 +37,11 @@
* If expr is true, it returns no value.
* @retval None
*/
- #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
+#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
- void assert_failed(uint8_t* file, uint32_t line);
+void assert_failed(uint8_t *file, uint32_t line);
#else
- #define assert_param(expr) ((void)0U)
+#define assert_param(expr) ((void)0U)
#endif /* USE_FULL_ASSERT */
#ifdef __cplusplus
diff --git a/Core/Inc/stm32g0xx_it.h b/Core/Inc/stm32g0xx_it.h
index b4d2eb9..c0bd470 100644
--- a/Core/Inc/stm32g0xx_it.h
+++ b/Core/Inc/stm32g0xx_it.h
@@ -49,8 +49,6 @@
void NMI_Handler(void);
void HardFault_Handler(void);
void SVC_Handler(void);
-void PendSV_Handler(void);
-void SysTick_Handler(void);
/* USER CODE BEGIN EFP */
/* USER CODE END EFP */
diff --git a/Core/Inc/tx_user.h b/Core/Inc/tx_user.h
new file mode 100644
index 0000000..58af04b
--- /dev/null
+++ b/Core/Inc/tx_user.h
@@ -0,0 +1,313 @@
+/***************************************************************************
+ * Copyright (c) 2024 Microsoft Corporation
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** User Specific */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_user.h PORTABLE C */
+/* 6.3.0 */
+/* */
+/* AUTHOR */
+/* */
+/* William E. Lamie, Microsoft Corporation */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains user defines for configuring ThreadX in specific */
+/* ways. This file will have an effect only if the application and */
+/* ThreadX library are built with TX_INCLUDE_USER_DEFINE_FILE defined. */
+/* Note that all the defines in this file may also be made on the */
+/* command line when building ThreadX library and application objects. */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 05-19-2020 William E. Lamie Initial Version 6.0 */
+/* 09-30-2020 Yuxin Zhou Modified comment(s), */
+/* resulting in version 6.1 */
+/* 03-02-2021 Scott Larson Modified comment(s), */
+/* added option to remove */
+/* FileX pointer, */
+/* resulting in version 6.1.5 */
+/* 06-02-2021 Scott Larson Added options for multiple */
+/* block pool search & delay, */
+/* resulting in version 6.1.7 */
+/* 10-15-2021 Yuxin Zhou Modified comment(s), added */
+/* user-configurable symbol */
+/* TX_TIMER_TICKS_PER_SECOND */
+/* resulting in version 6.1.9 */
+/* 04-25-2022 Wenhui Xie Modified comment(s), */
+/* optimized the definition of */
+/* TX_TIMER_TICKS_PER_SECOND, */
+/* resulting in version 6.1.11 */
+/* 10-31-2023 Xiuwen Cai Modified comment(s), */
+/* added option for random */
+/* number stack filling, */
+/* resulting in version 6.3.0 */
+/* */
+/**************************************************************************/
+
+#ifndef TX_USER_H
+#define TX_USER_H
+
+
+/* Define various build options for the ThreadX port. The application should either make changes
+ here by commenting or un-commenting the conditional compilation defined OR supply the defines
+ though the compiler's equivalent of the -D option.
+
+ For maximum speed, the following should be defined:
+
+ TX_MAX_PRIORITIES 32
+ TX_DISABLE_PREEMPTION_THRESHOLD
+ TX_DISABLE_REDUNDANT_CLEARING
+ TX_DISABLE_NOTIFY_CALLBACKS
+ TX_NOT_INTERRUPTABLE
+ TX_TIMER_PROCESS_IN_ISR
+ TX_REACTIVATE_INLINE
+ TX_DISABLE_STACK_FILLING
+ TX_INLINE_THREAD_RESUME_SUSPEND
+
+ For minimum size, the following should be defined:
+
+ TX_MAX_PRIORITIES 32
+ TX_DISABLE_PREEMPTION_THRESHOLD
+ TX_DISABLE_REDUNDANT_CLEARING
+ TX_DISABLE_NOTIFY_CALLBACKS
+ TX_NO_FILEX_POINTER
+ TX_NOT_INTERRUPTABLE
+ TX_TIMER_PROCESS_IN_ISR
+
+ Of course, many of these defines reduce functionality and/or change the behavior of the
+ system in ways that may not be worth the trade-off. For example, the TX_TIMER_PROCESS_IN_ISR
+ results in faster and smaller code, however, it increases the amount of processing in the ISR.
+ In addition, some services that are available in timers are not available from ISRs and will
+ therefore return an error if this option is used. This may or may not be desirable for a
+ given application. */
+
+
+/* Override various options with default values already assigned in tx_port.h. Please also refer
+ to tx_port.h for descriptions on each of these options. */
+
+/*
+#define TX_MAX_PRIORITIES 32
+#define TX_MINIMUM_STACK ????
+#define TX_THREAD_USER_EXTENSION ????
+#define TX_TIMER_THREAD_STACK_SIZE ????
+#define TX_TIMER_THREAD_PRIORITY ????
+*/
+
+/* Define the common timer tick reference for use by other middleware components. The default
+ value is 10ms (i.e. 100 ticks, defined in tx_api.h), but may be replaced by a port-specific
+ version in tx_port.h or here.
+ Note: the actual hardware timer value may need to be changed (usually in tx_initialize_low_level). */
+
+#define TX_TIMER_TICKS_PER_SECOND (1000UL)
+
+/* Determine if there is a FileX pointer in the thread control block.
+ By default, the pointer is there for legacy/backwards compatibility.
+ The pointer must also be there for applications using FileX.
+ Define this to save space in the thread control block.
+*/
+
+/*
+#define TX_NO_FILEX_POINTER
+*/
+
+/* Determine if timer expirations (application timers, timeouts, and tx_thread_sleep calls
+ should be processed within the a system timer thread or directly in the timer ISR.
+ By default, the timer thread is used. When the following is defined, the timer expiration
+ processing is done directly from the timer ISR, thereby eliminating the timer thread control
+ block, stack, and context switching to activate it. */
+
+/*
+#define TX_TIMER_PROCESS_IN_ISR
+*/
+
+/* Determine if in-line timer reactivation should be used within the timer expiration processing.
+ By default, this is disabled and a function call is used. When the following is defined,
+ reactivating is performed in-line resulting in faster timer processing but slightly larger
+ code size. */
+
+/*
+#define TX_REACTIVATE_INLINE
+*/
+
+/* Determine is stack filling is enabled. By default, ThreadX stack filling is enabled,
+ which places an 0xEF pattern in each byte of each thread's stack. This is used by
+ debuggers with ThreadX-awareness and by the ThreadX run-time stack checking feature. */
+
+/*
+#define TX_DISABLE_STACK_FILLING
+*/
+
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+ disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
+ checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
+ define is negated, thereby forcing the stack fill which is necessary for the stack checking
+ logic. */
+
+/*
+#define TX_ENABLE_STACK_CHECKING
+*/
+
+/* Determine if random number is used for stack filling. By default, ThreadX uses a fixed
+ pattern for stack filling. When the following is defined, ThreadX uses a random number
+ for stack filling. This is effective only when TX_ENABLE_STACK_CHECKING is defined. */
+
+/*
+#define TX_ENABLE_RANDOM_NUMBER_STACK_FILLING
+*/
+
+/* Determine if preemption-threshold should be disabled. By default, preemption-threshold is
+ enabled. If the application does not use preemption-threshold, it may be disabled to reduce
+ code size and improve performance. */
+
+/*
+#define TX_DISABLE_PREEMPTION_THRESHOLD
+*/
+
+/* Determine if global ThreadX variables should be cleared. If the compiler startup code clears
+ the .bss section prior to ThreadX running, the define can be used to eliminate unnecessary
+ clearing of ThreadX global variables. */
+
+/*
+#define TX_DISABLE_REDUNDANT_CLEARING
+*/
+
+/* Determine if no timer processing is required. This option will help eliminate the timer
+ processing when not needed. The user will also have to comment out the call to
+ tx_timer_interrupt, which is typically made from assembly language in
+ tx_initialize_low_level. Note: if TX_NO_TIMER is used, the define TX_TIMER_PROCESS_IN_ISR
+ must also be used and tx_timer_initialize must be removed from ThreadX library. */
+
+/*
+#define TX_NO_TIMER
+#ifndef TX_TIMER_PROCESS_IN_ISR
+#define TX_TIMER_PROCESS_IN_ISR
+#endif
+*/
+
+/* Determine if the notify callback option should be disabled. By default, notify callbacks are
+ enabled. If the application does not use notify callbacks, they may be disabled to reduce
+ code size and improve performance. */
+
+#define TX_DISABLE_NOTIFY_CALLBACKS
+
+
+/* Determine if the tx_thread_resume and tx_thread_suspend services should have their internal
+ code in-line. This results in a larger image, but improves the performance of the thread
+ resume and suspend services. */
+
+/*
+#define TX_INLINE_THREAD_RESUME_SUSPEND
+*/
+
+
+/* Determine if the internal ThreadX code is non-interruptable. This results in smaller code
+ size and less processing overhead, but increases the interrupt lockout time. */
+
+/*
+#define TX_NOT_INTERRUPTABLE
+*/
+
+
+/* Determine if the trace event logging code should be enabled. This causes slight increases in
+ code size and overhead, but provides the ability to generate system trace information which
+ is available for viewing in TraceX. */
+
+/*
+#define TX_ENABLE_EVENT_TRACE
+*/
+
+
+/* Determine if block pool performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various block pool performance information. */
+
+/*
+#define TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if byte pool performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various byte pool performance information. */
+
+/*
+#define TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if event flags performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various event flags performance information. */
+
+/*
+#define TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if mutex performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various mutex performance information. */
+
+/*
+#define TX_MUTEX_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if queue performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various queue performance information. */
+
+/*
+#define TX_QUEUE_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if semaphore performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various semaphore performance information. */
+
+/*
+#define TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if thread performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various thread performance information. */
+
+/*
+#define TX_THREAD_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if timer performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various timer performance information. */
+
+/*
+#define TX_TIMER_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Override options for byte pool searches of multiple blocks. */
+
+/*
+#define TX_BYTE_POOL_MULTIPLE_BLOCK_SEARCH 20
+*/
+
+/* Override options for byte pool search delay to avoid thrashing. */
+
+/*
+#define TX_BYTE_POOL_DELAY_VALUE 3
+*/
+
+#endif
+
diff --git a/Core/Src/LED.c b/Core/Src/LED.c
new file mode 100644
index 0000000..5622919
--- /dev/null
+++ b/Core/Src/LED.c
@@ -0,0 +1,22 @@
+/*
+ * LED.c
+ *
+ * Created on: Apr 19, 2024
+ * Author: Carst
+ */
+
+#include
+#include "stm32g0xx_ll_gpio.h"
+#include "tx_api.h"
+
+void LED(ULONG thread_input)
+{
+ (void)thread_input;
+
+ while(true)
+ {
+ tx_thread_sleep(500U);
+
+ LL_GPIO_TogglePin(GPIOA, LL_GPIO_PIN_10);
+ }
+}
diff --git a/Core/Src/main.c b/Core/Src/main.c
index c56f0c8..d1bb4db 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -21,7 +21,7 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
-
+#include "tx_api.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@@ -100,6 +100,7 @@ void SystemClock_Config(void)
/* Set APB1 prescaler*/
LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
LL_Init1msTick(64000000);
+ LL_SYSTICK_EnableIT();
/* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
LL_SetSystemCoreClock(64000000);
}
@@ -141,7 +142,19 @@ __NO_RETURN int main(void)
SystemClock_Config();
MX_GPIO_Init();
+ tx_kernel_enter();
+ __BKPT(0);
+}
+
+extern void LED(ULONG thread_input);
+TX_THREAD tx_LED;
+ULONG stack_LED[64];
+
+void tx_application_define(void *first_unused_memory)
+{
+ (void)first_unused_memory;
+ tx_thread_create(&tx_LED, "LED", LED, 0UL, stack_LED, sizeof(stack_LED), 1U, 1U, TX_NO_TIME_SLICE, TX_AUTO_START);
}
/* USER CODE END 4 */
diff --git a/Core/Src/stm32g0xx_it.c b/Core/Src/stm32g0xx_it.c
index 15e9d43..9a0009e 100644
--- a/Core/Src/stm32g0xx_it.c
+++ b/Core/Src/stm32g0xx_it.c
@@ -106,33 +106,6 @@ void SVC_Handler(void)
/* USER CODE END SVC_IRQn 1 */
}
-/**
- * @brief This function handles Pendable request for system service.
- */
-void PendSV_Handler(void)
-{
- /* USER CODE BEGIN PendSV_IRQn 0 */
-
- /* USER CODE END PendSV_IRQn 0 */
- /* USER CODE BEGIN PendSV_IRQn 1 */
-
- /* USER CODE END PendSV_IRQn 1 */
-}
-
-/**
- * @brief This function handles System tick timer.
- */
-void SysTick_Handler(void)
-{
- /* USER CODE BEGIN SysTick_IRQn 0 */
-
- /* USER CODE END SysTick_IRQn 0 */
-
- /* USER CODE BEGIN SysTick_IRQn 1 */
-
- /* USER CODE END SysTick_IRQn 1 */
-}
-
/******************************************************************************/
/* STM32G0xx Peripheral Interrupt Handlers */
/* Add here the Interrupt Handlers for the used peripherals. */
diff --git a/Core/Startup/startup_stm32g071kbtx.s b/Core/Startup/startup_stm32g071kbtx.s
index ac01304..6091eb0 100644
--- a/Core/Startup/startup_stm32g071kbtx.s
+++ b/Core/Startup/startup_stm32g071kbtx.s
@@ -192,7 +192,7 @@ g_pfnVectors:
.weak HardFault_Handler
.thumb_set HardFault_Handler,Default_Handler
-
+/*
.weak SVC_Handler
.thumb_set SVC_Handler,Default_Handler
@@ -201,7 +201,7 @@ g_pfnVectors:
.weak SysTick_Handler
.thumb_set SysTick_Handler,Default_Handler
-
+*/
.weak WWDG_IRQHandler
.thumb_set WWDG_IRQHandler,Default_Handler
diff --git a/Core/Startup/tx_initialize_low_level.S b/Core/Startup/tx_initialize_low_level.S
new file mode 100644
index 0000000..f95d553
--- /dev/null
+++ b/Core/Startup/tx_initialize_low_level.S
@@ -0,0 +1,185 @@
+@/***************************************************************************
+@ * Copyright (c) 2024 Microsoft Corporation
+@ *
+@ * This program and the accompanying materials are made available under the
+@ * terms of the MIT License which is available at
+@ * https://opensource.org/licenses/MIT.
+@ *
+@ * SPDX-License-Identifier: MIT
+@ **************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Initialize */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_initialize.h"
+@#include "tx_thread.h"
+@#include "tx_timer.h"
+@
+@
+ .global _tx_thread_system_stack_ptr
+ .global _tx_initialize_unused_memory
+ .global __RAM_segment_used_end__
+ .global _tx_thread_context_save
+ .global _tx_thread_context_restore
+ .global _tx_timer_interrupt
+ .global _vectors
+@
+ .text
+ .align 4
+ .syntax unified
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_initialize_low_level Cortex-M0/GNU */
+@/* 6.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function is responsible for any low-level processor */
+@/* initialization, including setting up interrupt vectors, setting */
+@/* up a periodic timer interrupt source, saving the system stack */
+@/* pointer for use in ISR processing later, and finding the first */
+@/* available RAM memory address for tx_application_define. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 05-19-2020 William E. Lamie Initial Version 6.0 */
+@/* 09-30-2020 Scott Larson Modified comment(s), and */
+@/* commented out code for */
+@/* enabling DWT, */
+@/* resulting in version 6.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_initialize_low_level(VOID)
+@{
+ .global _tx_initialize_low_level
+ .thumb_func
+_tx_initialize_low_level:
+@
+@ /* Disable interrupts during ThreadX initialization. */
+@
+ CPSID i
+ /* Configure handler priorities. */
+
+ LDR r1, =0x00000000 // Rsrv, UsgF, BusF, MemM
+ LDR r0, =0xE000E000 // Build address of NVIC registers
+ LDR r2, =0xD18 //
+ ADD r0, r0, r2 //
+ STR r1, [r0] // Setup System Handlers 4-7 Priority Registers
+ LDR r1, =0xFF000000 // SVCl, Rsrv, Rsrv, Rsrv
+ LDR r0, =0xE000E000 // Build address of NVIC registers
+ LDR r2, =0xD1C //
+ ADD r0, r0, r2 //
+ STR r1, [r0] // Setup System Handlers 8-11 Priority Registers
+ // Note: SVC must be lowest priority, which is 0xFF
+ LDR r1, =0x40FF0000 // SysT, PnSV, Rsrv, DbgM
+ LDR r0, =0xE000E000 // Build address of NVIC registers
+ LDR r2, =0xD20 //
+ ADD r0, r0, r2 //
+ STR r1, [r0] // Setup System Handlers 12-15 Priority Registers
+ // Note: PnSV must be lowest priority, which is 0xFF
+
+ /* Return to caller. */
+ BX lr
+// }
+
+/* Define shells for each of the unused vectors. */
+ .global __tx_BadHandler
+ .thumb_func
+__tx_BadHandler:
+ B __tx_BadHandler
+
+/* added to catch the hardfault */
+ .global __tx_HardfaultHandler
+ .thumb_func
+__tx_HardfaultHandler:
+ B __tx_HardfaultHandler
+
+/* Generic interrupt handler template */
+ .global __tx_IntHandler
+ .thumb_func
+__tx_IntHandler:
+// VOID InterruptHandler (VOID)
+// {
+ PUSH {r0, lr}
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ BL _tx_execution_isr_enter // Call the ISR enter function
+#endif
+ /* Do interrupt handler work here */
+ /* BL .... */
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ BL _tx_execution_isr_exit // Call the ISR exit function
+#endif
+ POP {r0, r1}
+ MOV lr, r1
+ BX lr
+// }
+
+/* System Tick timer interrupt handler */
+ .global __tx_SysTickHandler
+ .global SysTick_Handler
+ .thumb_func
+__tx_SysTickHandler:
+ .thumb_func
+SysTick_Handler:
+// VOID SysTick_Handler (VOID)
+// {
+ PUSH {r0, lr}
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+ BL _tx_execution_isr_enter // Call the ISR enter function
+#endif
+ BL _tx_timer_interrupt
+#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))
+ BL _tx_execution_isr_exit // Call the ISR exit function
+#endif
+ POP {r0, r1}
+ MOV lr, r1
+ BX lr
+// }
+
+/* NMI, DBG handlers */
+ .global __tx_NMIHandler
+ .thumb_func
+__tx_NMIHandler:
+ B __tx_NMIHandler
+
+ .global __tx_DBGHandler
+ .thumb_func
+__tx_DBGHandler:
+ B __tx_DBGHandler
diff --git a/STM32G071KBTX_FLASH.ld b/STM32G071KBTX_FLASH.ld
index 3ec697d..423e648 100644
--- a/STM32G071KBTX_FLASH.ld
+++ b/STM32G071KBTX_FLASH.ld
@@ -60,7 +60,7 @@ SECTIONS
} >FLASH
/* The program code and other data into "FLASH" Rom type memory */
- .text :
+ .text (READONLY) :
{
. = ALIGN(4);
*(.text) /* .text sections (code) */
@@ -77,7 +77,7 @@ SECTIONS
} >FLASH
/* Constant data into "FLASH" Rom type memory */
- .rodata :
+ .rodata (READONLY) :
{
. = ALIGN(4);
*(.rodata) /* .rodata sections (constants, strings, etc.) */
@@ -85,13 +85,13 @@ SECTIONS
. = ALIGN(4);
} >FLASH
- .ARM.extab : {
+ .ARM.extab (READONLY) : {
. = ALIGN(4);
*(.ARM.extab* .gnu.linkonce.armextab.*)
. = ALIGN(4);
} >FLASH
- .ARM : {
+ .ARM (READONLY) : {
. = ALIGN(4);
__exidx_start = .;
*(.ARM.exidx*)
@@ -99,7 +99,7 @@ SECTIONS
. = ALIGN(4);
} >FLASH
- .preinit_array :
+ .preinit_array (READONLY) :
{
. = ALIGN(4);
PROVIDE_HIDDEN (__preinit_array_start = .);
@@ -108,7 +108,7 @@ SECTIONS
. = ALIGN(4);
} >FLASH
- .init_array :
+ .init_array (READONLY) :
{
. = ALIGN(4);
PROVIDE_HIDDEN (__init_array_start = .);
@@ -118,7 +118,7 @@ SECTIONS
. = ALIGN(4);
} >FLASH
- .fini_array :
+ .fini_array (READONLY) :
{
. = ALIGN(4);
PROVIDE_HIDDEN (__fini_array_start = .);
diff --git a/ThreadX_Test.ioc b/ThreadX_Test.ioc
index 2462314..134f9fb 100644
--- a/ThreadX_Test.ioc
+++ b/ThreadX_Test.ioc
@@ -1,6 +1,6 @@
#MicroXplorer Configuration settings - do not modify
-CAD.formats=
-CAD.pinconfig=
+CAD.formats=[]
+CAD.pinconfig=Dual
CAD.provider=
File.Version=6
GPIO.groupedBy=Group By Peripherals
@@ -23,14 +23,14 @@ Mcu.PinsNb=6
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32G071KBTx
-MxCube.Version=6.10.0
-MxDb.Version=DB.6.0.100
+MxCube.Version=6.11.0
+MxDb.Version=DB.6.0.110
NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
-NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false
NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
-NVIC.SysTick_IRQn=true\:3\:0\:false\:false\:true\:false\:true\:false
+NVIC.SysTick_IRQn=true\:3\:0\:false\:false\:false\:false\:true\:false
PA10.Locked=true
PA10.Signal=GPIO_Output
PA13.Mode=Serial_Wire
@@ -71,7 +71,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=true
-ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true
+ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-true,2-MX_GPIO_Init-GPIO-false-LL-true
RCC.ADCFreq_Value=64000000
RCC.AHBFreq_Value=64000000
RCC.APBFreq_Value=64000000