From 666ad4cfc017627ebb526907b6bf444c6c3d9980 Mon Sep 17 00:00:00 2001 From: Caio Date: Thu, 13 Nov 2025 21:29:55 -0500 Subject: [PATCH 1/4] stubs for threadx --- Testing/manual_mocks/stubs.h | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/Testing/manual_mocks/stubs.h b/Testing/manual_mocks/stubs.h index 661687ca..ec2ec6b2 100644 --- a/Testing/manual_mocks/stubs.h +++ b/Testing/manual_mocks/stubs.h @@ -51,6 +51,7 @@ typedef enum { typedef void *ADC_HandleTypeDef; typedef void *I2C_HandleTypeDef; typedef void *CAN_HandleTypeDef; +typedef void *FDCAN_HandleTypeDef; typedef void *SPI_HandleTypeDef; typedef void *TIM_HandleTypeDef; typedef void *IWDG_HandleTypeDef; @@ -94,7 +95,6 @@ typedef struct { uint32_t HAL_GetTick(void); - osMutexId_t osMutexNew(const osMutexAttr_t *attr); uint32_t osMutexAcquire(osMutexId_t mutex, uint32_t timeout); uint32_t osMutexRelease(osMutexId_t mutex); @@ -169,9 +169,34 @@ int HAL_Delay(int delay); #define GPIOA ((GPIO_TypeDef *)0x40020000) #define GPIOB ((GPIO_TypeDef *)0x40020400) #define GPIOC ((GPIO_TypeDef *)0x40020800) +#define GPIOD ((GPIO_TypeDef *)0x40020800) +#define GPIOE ((GPIO_TypeDef *)0x40020800) +#define GPIOF ((GPIO_TypeDef *)0x40020800) +#define GPIOG ((GPIO_TypeDef *)0x40020800) #define osFlagsWaitAny 0x00000001U +#define VOID void +typedef char CHAR; +typedef unsigned char UCHAR; +typedef int INT; +typedef unsigned int UINT; +typedef long LONG; +typedef unsigned long ULONG; +typedef unsigned long long ULONG64; +typedef short SHORT; +typedef unsigned short USHORT; +#define ULONG64_DEFINED + +typedef struct { +} TX_MUTEX; + +typedef struct { +} TX_BYTE_POOL; + +typedef struct { +} TX_QUEUE; + // clang-format on #endif \ No newline at end of file From 7a66a5fc5bd3efe0c3ba77b038678754cfcd91c9 Mon Sep 17 00:00:00 2001 From: Caio Date: Thu, 13 Nov 2025 21:42:26 -0500 Subject: [PATCH 2/4] fix printing in flags api --- threadX/src/u_tx_flags.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/threadX/src/u_tx_flags.c b/threadX/src/u_tx_flags.c index a50a9042..44a33472 100644 --- a/threadX/src/u_tx_flags.c +++ b/threadX/src/u_tx_flags.c @@ -7,17 +7,17 @@ TX_EVENT_FLAGS_GROUP event_flags; uint8_t flags_init() { if (tx_event_flags_create(&event_flags, "Thread Flags")) { - DEBUG_PRINTLN("Failed to initialize flag event groups."); + PRINTLN_INFO("Failed to initialize flag event groups."); return U_ERROR; } - DEBUG_PRINTLN("Ran flags_init()."); + PRINTLN_INFO("Ran flags_init()."); return U_SUCCESS; } uint8_t set_flag(ULONG flag) { if (tx_event_flags_set(&event_flags, flag, TX_OR)) { - DEBUG_PRINTLN("Failed to set flag %d.", flag); + PRINTLN_INFO("Failed to set flag %d.", flag); return U_ERROR; } return U_SUCCESS; @@ -28,7 +28,7 @@ uint8_t get_flag(ULONG flag, ULONG timeout) ULONG result_flags; if (tx_event_flags_get(&event_flags, flag, TX_OR_CLEAR, &result_flags, timeout)) { - DEBUG_PRINTLN("Failed to get flag %d.", flag); + PRINTLN_INFO("Failed to get flag %d.", flag); return U_ERROR; } return U_SUCCESS; From 5f88932d2659cdbebc4c00b0f4689f1bce8ec6bd Mon Sep 17 00:00:00 2001 From: Caio Date: Tue, 18 Nov 2025 21:11:44 -0500 Subject: [PATCH 3/4] no more stubs --- Testing/Makefile | 4 +- Testing/manual_mocks/stubs.h | 202 -------------------- ner_environment/build_system/test_runner.py | 18 +- 3 files changed, 16 insertions(+), 208 deletions(-) delete mode 100644 Testing/manual_mocks/stubs.h diff --git a/Testing/Makefile b/Testing/Makefile index 229daeaf..45be9b35 100644 --- a/Testing/Makefile +++ b/Testing/Makefile @@ -19,6 +19,7 @@ TEST_FILE ?= TEST_PACKAGE ?= C_SOURCES ?= INCLUDE_DIRS ?= +C_DEFINES ?= TEST_BUILD_OBJS := $(TEST_BUILD)/objs/$(TEST_PACKAGE) @@ -41,14 +42,13 @@ TARGET := $(TEST_BUILD_BIN)/$(TEST_NAME) # Include dirs C_INCLUDES := \ - -I$(EMEBEDDED_TESTING_DIR)/manual_mocks \ -I$(UNITY_SRC) \ -I$(CMOCK_SRC) \ $(addprefix -I,$(INCLUDE_DIRS)) \ -I$(MOCKS_DIR)/$(TEST_PACKAGE) \ -I$(TEST_DIR)/Inc -CFLAGS = -w -DTESTING $(C_INCLUDES) +CFLAGS = -w $(C_DEFINES) $(C_INCLUDES) TEST_SOURCES = $(CMOCK_SRC)/cmock.c $(UNITY_SRC)/unity.c diff --git a/Testing/manual_mocks/stubs.h b/Testing/manual_mocks/stubs.h deleted file mode 100644 index ec2ec6b2..00000000 --- a/Testing/manual_mocks/stubs.h +++ /dev/null @@ -1,202 +0,0 @@ -#ifndef MOCK_STUBS_H -#define MOCK_STUBS_H - -#include -#include - -// clang-format off - -#define osWaitForever 0xFFFFFFFFU -#define osTimerPeriodic 0 -#define osTimerOnce 1 - -typedef enum { - HAL_OK = 0x00U, - HAL_ERROR = 0x01U, - HAL_BUSY = 0x02U, - HAL_TIMEOUT = 0x03U -} HAL_StatusTypeDef; - -typedef enum { - osOK = 0, ///< Operation completed successfully. - osError = - -1, ///< Unspecified RTOS error: run-time error but no other error message fits. - osErrorTimeout = - -2, ///< Operation not completed within the timeout period. - osErrorResource = -3, ///< Resource not available. - osErrorParameter = -4, ///< Parameter error. - osErrorNoMemory = - -5, ///< System is out of memory: it was impossible to allocate or reserve memory for the operation. - osErrorISR = - -6, ///< Not allowed in ISR context: the function cannot be called from interrupt service routines. - osStatusReserved = - 0x7FFFFFFF ///< Prevents enum down-size compiler optimization. -} osStatus_t; - -typedef enum { - osPriorityLow, - osPriorityBelowNormal, - osPriorityNormal, - osPriorityHigh, - osPriorityRealtime, - osPriorityRealtime1, - osPriorityRealtime2, - osPriorityRealtime3, - osPriorityRealtime4, - osPriorityRealtime5, - osPriorityRealtime6, - osPriorityRealtime7, -} osPriority_t; - -typedef void *ADC_HandleTypeDef; -typedef void *I2C_HandleTypeDef; -typedef void *CAN_HandleTypeDef; -typedef void *FDCAN_HandleTypeDef; -typedef void *SPI_HandleTypeDef; -typedef void *TIM_HandleTypeDef; -typedef void *IWDG_HandleTypeDef; - -typedef void *osMutexId_t; -typedef void *osTimerId_t; -typedef void *osThreadId_t; -typedef void *osMessageQueueId_t; -typedef void (*osTimerFunc_t)(void *); - -#define osTimerId osTimerId_t -#define osMutexId osMutexId_t -#define osThreadId osThreadId_t -#define osMessageQueueId osMessageQueueId_t - -typedef struct { - const char *name; - uint32_t stack_size; - osPriority_t priority; -} osThreadAttr_t; - -typedef struct { - const char *name; -} osTimerAttr_t; - -typedef struct { - const char *name; -} osMutexAttr_t; - -typedef struct { - uint32_t StdId; - uint32_t ExtId; - uint32_t IDE; - uint32_t RTR; - uint32_t DLC; -} CAN_RxHeaderTypeDef; - -typedef struct { - volatile uint32_t ODR; -} GPIO_TypeDef; - -uint32_t HAL_GetTick(void); - -osMutexId_t osMutexNew(const osMutexAttr_t *attr); -uint32_t osMutexAcquire(osMutexId_t mutex, uint32_t timeout); -uint32_t osMutexRelease(osMutexId_t mutex); -osTimerId_t osTimerNew(osTimerFunc_t func, uint32_t type, void *arg, - void *attr); -uint32_t osTimerStart(osTimerId_t timer_id, uint32_t ticks); -uint32_t osTimerStop(osTimerId_t timer_id); -void osDelay(uint32_t ms); -osMessageQueueId_t osMessageQueueNew(uint32_t msg_count, uint32_t msg_size, - void *attr); -uint32_t osMessageQueuePut(osMessageQueueId_t queue_id, const void *msg_ptr, - uint8_t msg_prio, uint32_t timeout); -uint32_t osMessageQueueGet(osMessageQueueId_t queue_id, void *msg_ptr, - uint8_t *msg_prio, uint32_t timeout); -uint32_t osThreadFlagsWait(uint32_t flags, uint32_t options, uint32_t timeout); -uint32_t osThreadFlagsSet(osThreadId_t thread_id, uint32_t flags); -int HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t fifo, - CAN_RxHeaderTypeDef *rx_header, uint8_t *rx_data); -uint32_t pdMS_TO_TICKS(uint32_t ms); -HAL_StatusTypeDef HAL_ADC_Start_DMA(void *hadc, uint32_t *pData, - uint32_t Length); - -HAL_StatusTypeDef HAL_I2C_Mem_Write(void *hi2c, uint16_t devAddress, - uint16_t memAddress, uint16_t memAddSize, - uint8_t *pData, uint16_t size, - uint32_t timeout); - -HAL_StatusTypeDef HAL_I2C_Mem_Read(void *hi2c, uint16_t devAddress, - uint16_t memAddress, uint16_t memAddSize, - uint8_t *pData, uint16_t size, - uint32_t timeout); -HAL_StatusTypeDef HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, - uint32_t PinState); -HAL_StatusTypeDef HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan); -void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); -uint32_t HAL_GetTick(void); -HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, - uint16_t DevAddress, uint8_t *pData, - uint16_t Size, uint32_t Timeout); -HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, - uint16_t DevAddress, uint8_t *pData, - uint16_t Size, uint32_t Timeout); -int HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); -int __HAL_TIM_GET_COUNTER(TIM_HandleTypeDef *htim); -int HAL_Delay(int delay); - -#define I2C_MEMADD_SIZE_8BIT 1 -#define HAL_MAX_DELAY 0xFFFFFFFFU - -#define GPIO_PIN_RESET 0 -#define GPIO_PIN_SET 1 -#define GPIO_PIN_1 1 -#define GPIO_PIN_2 2 -#define GPIO_PIN_3 3 -#define GPIO_PIN_4 4 -#define GPIO_PIN_5 5 -#define GPIO_PIN_6 6 -#define GPIO_PIN_7 7 -#define GPIO_PIN_8 8 -#define GPIO_PIN_9 9 -#define GPIO_PIN_10 10 -#define GPIO_PIN_11 11 -#define GPIO_PIN_12 12 -#define GPIO_PIN_13 13 -#define GPIO_PIN_14 14 -#define GPIO_PIN_15 15 -#define GPIO_PIN_16 16 - -#define CAN_RX_FIFO0 0 -#define CAN_ID_EXT 1 - -#define GPIOA ((GPIO_TypeDef *)0x40020000) -#define GPIOB ((GPIO_TypeDef *)0x40020400) -#define GPIOC ((GPIO_TypeDef *)0x40020800) -#define GPIOD ((GPIO_TypeDef *)0x40020800) -#define GPIOE ((GPIO_TypeDef *)0x40020800) -#define GPIOF ((GPIO_TypeDef *)0x40020800) -#define GPIOG ((GPIO_TypeDef *)0x40020800) - -#define osFlagsWaitAny 0x00000001U - -#define VOID void -typedef char CHAR; -typedef unsigned char UCHAR; -typedef int INT; -typedef unsigned int UINT; -typedef long LONG; -typedef unsigned long ULONG; -typedef unsigned long long ULONG64; -typedef short SHORT; -typedef unsigned short USHORT; -#define ULONG64_DEFINED - -typedef struct { -} TX_MUTEX; - -typedef struct { -} TX_BYTE_POOL; - -typedef struct { -} TX_QUEUE; - -// clang-format on - -#endif \ No newline at end of file diff --git a/ner_environment/build_system/test_runner.py b/ner_environment/build_system/test_runner.py index dd3f0bcd..5a552901 100644 --- a/ner_environment/build_system/test_runner.py +++ b/ner_environment/build_system/test_runner.py @@ -7,7 +7,6 @@ EMBEDDED_BASE_PATH = "Drivers/Embedded-Base/" EMBEDDED_BASE_TESTING_DIR_PATH = EMBEDDED_BASE_PATH + "Testing/" -MOCK_STUBS_FILEPATH = EMBEDDED_BASE_TESTING_DIR_PATH + "manual_mocks/mock_stubs.h" BUILD_DIR = EMBEDDED_BASE_TESTING_DIR_PATH + "build" CMAKE_TOOLCHAIN_FILEPATH = EMBEDDED_BASE_TESTING_DIR_PATH + "test-toolchain.cmake" PROJECT_TEST_DIR_PATH = "Tests/" @@ -16,7 +15,7 @@ TEST_CONF_PATH = PROJECT_TEST_DIR_PATH + "ner_test.conf" CMOCK_RUBY_SCRIPT_PATH = "/cmock_portable/lib/cmock.rb" EMBEDDED_BASE_CMOCK_CONFIG = EMBEDDED_BASE_TESTING_DIR_PATH + "cmock-config.yml" -PROJECT_CMOCK_CONFIG = PROJECT_TEST_DIR_PATH + "cmock-config.yml" +PROJECT_CMOCK_CONFIG = PROJECT_TEST_DIR_PATH + "cmock-config.yml" data = {} with open("Tests/ner_test.conf", "rb") as f: @@ -99,7 +98,7 @@ def create_mocks(selected_test_packages): -def build_test(test_name, test_file, test_package, source_files): +def build_test(test_name, test_file, test_package, source_files, c_defines): print("BUILDING TEST: " + test_name) @@ -112,6 +111,7 @@ def build_test(test_name, test_file, test_package, source_files): TEST_FILE={test_file} \ TEST_PACKAGE={test_package} \ C_SOURCES="{joined_sources}" \ + C_DEFINES="{c_defines}" \ INCLUDE_DIRS="{joined_include_dirs}" """ @@ -134,13 +134,23 @@ def get_selected_test_packages(selected_tests): return selected_test_packages +def get_formatted_defines(): + c_defines = data.get("defines", []) + formatted_defines = [] + for cd in c_defines: + formatted_defines.append("-D" + cd) + + return " ".join(formatted_defines) + + def build_tests(selected_tests): + c_defines = get_formatted_defines() for t_name in selected_tests: t_data = tests[t_name] test_package = t_data["test-package"] test_file = t_data["test-file"] sources = get_project_sources(test_package) - process = build_test(t_name, test_file, test_package, sources) + process = build_test(t_name, test_file, test_package, sources, c_defines) retcode = process.wait() if (retcode != 0): return retcode From a54161207e3b8db7299e0f87b0ee1ce527e7a51c Mon Sep 17 00:00:00 2001 From: Caio Date: Thu, 20 Nov 2025 07:00:56 -0500 Subject: [PATCH 4/4] sys exit --- ner_environment/build_system/test_runner.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ner_environment/build_system/test_runner.py b/ner_environment/build_system/test_runner.py index 5a552901..ec63e1a9 100644 --- a/ner_environment/build_system/test_runner.py +++ b/ner_environment/build_system/test_runner.py @@ -197,5 +197,6 @@ def main(): return ret if __name__ == "__main__": - main() + ret = main() + sys.exit(ret) \ No newline at end of file