diff --git a/.github/workflows/buid.yml b/.github/workflows/buid.yml index 48b221c..f1ba749 100644 --- a/.github/workflows/buid.yml +++ b/.github/workflows/buid.yml @@ -34,7 +34,7 @@ jobs: - name: Build firmware run: | cd build - make -j$(nproc) + make cli -j$(nproc) # 5. Check ELF file size (helpful sanity check) - name: Firmware size diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e7bf11..842ab07 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,34 @@ cmake_minimum_required(VERSION 3.15) + +option(BUILD_CLI "Build CLI mode" OFF) +option(BUILD_SAMPLES "Build Samples mode" OFF) +option(BUILD_TESTS "Build Tests mode" OFF) + +if(BUILD_CLI) + add_compile_definitions(APP_MODE=CLI) +elseif(BUILD_SAMPLES) + add_compile_definitions(APP_MODE=SAMPLES) +elseif(BUILD_TESTS) + add_compile_definitions(APP_MODE=TESTS) +endif() + + +add_custom_target(cli + COMMAND ${CMAKE_COMMAND} -DBUILD_CLI=ON -S ${CMAKE_SOURCE_DIR} -B ${CMAKE_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} +) + +add_custom_target(samples + COMMAND ${CMAKE_COMMAND} -DBUILD_SAMPLES=ON -S ${CMAKE_SOURCE_DIR} -B ${CMAKE_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} +) + +add_custom_target(tests + COMMAND ${CMAKE_COMMAND} -DBUILD_TESTS=ON -S ${CMAKE_SOURCE_DIR} -B ${CMAKE_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} +) + + set(FREERTOS_KERNEL_DIR ${CMAKE_SOURCE_DIR}/freertos/FreeRTOS-Kernel) set(FREERTOS_PORT_DIR ${CMAKE_SOURCE_DIR}/freertos/) set(FREERTOS_SRC @@ -28,7 +58,6 @@ set(I2C_DRIVER ${CMAKE_SOURCE_DIR}/drivers/i2c/stm_i2c.c ) - project(blinky C) set(CPU_FLAGS "-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard") @@ -43,8 +72,8 @@ set(SOURCES ${CMAKE_SOURCE_DIR}/sources/console.c ${CMAKE_SOURCE_DIR}/sources/main.c ${CMAKE_SOURCE_DIR}/cli/base/FreeRTOS_CLI.c - ${CMAKE_SOURCE_DIR}/cli/app/cli_sample.c - ${CMAKE_SOURCE_DIR}/cli/app/cli_cal.c + ${CMAKE_SOURCE_DIR}/cli/app/cli_app.c + ${CMAKE_SOURCE_DIR}/cli/app/cli_helper.c ${CMAKE_SOURCE_DIR}/samples/i2c_sample.c ${UART_DRIVER} ${I2C_DRIVER} diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0caed09 --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +# Top-level Makefile + +BUILD_DIR = build + +.PHONY: all cmake $(MAKECMDGOALS) + +all: + @echo "Usage: make " + @echo "Example: make samples" + +cmake: + @rm -rf $(BUILD_DIR) + @mkdir -p $(BUILD_DIR) + @cd $(BUILD_DIR) && cmake .. + +$(MAKECMDGOALS): cmake + @cd $(BUILD_DIR) && $(MAKE) $(MAKECMDGOALS) + diff --git a/cli/app/cli_cal.c b/cli/app/cli_cal.c deleted file mode 100644 index 3427ad8..0000000 --- a/cli/app/cli_cal.c +++ /dev/null @@ -1,103 +0,0 @@ -#include -#include -#include -#include "FreeRTOS.h" -#include "FreeRTOS_CLI.h" - -/* Add Command */ -static BaseType_t prvAddCommand(char *pcWriteBuffer, size_t xWriteBufferLen, - const char *pcCommandString) -{ - const char *pcParameter1, *pcParameter2; - BaseType_t xParameter1Length, xParameter2Length; - int num1, num2; - - pcParameter1 = FreeRTOS_CLIGetParameter(pcCommandString, 1, &xParameter1Length); - pcParameter2 = FreeRTOS_CLIGetParameter(pcCommandString, 2, &xParameter2Length); - - if (pcParameter1 == NULL || pcParameter2 == NULL) - { - snprintf(pcWriteBuffer, xWriteBufferLen, "Error: Missing parameters\r\n"); - return pdFALSE; - } - - num1 = atoi(pcParameter1); - num2 = atoi(pcParameter2); - - snprintf(pcWriteBuffer, xWriteBufferLen, "Result: %d\r\n", num1 + num2); - return pdFALSE; -} - -/* Subtract Command */ -static BaseType_t prvSubCommand(char *pcWriteBuffer, size_t xWriteBufferLen, - const char *pcCommandString) -{ - const char *pcParameter1, *pcParameter2; - BaseType_t xParameter1Length, xParameter2Length; - int num1, num2; - - pcParameter1 = FreeRTOS_CLIGetParameter(pcCommandString, 1, &xParameter1Length); - pcParameter2 = FreeRTOS_CLIGetParameter(pcCommandString, 2, &xParameter2Length); - - if (pcParameter1 == NULL || pcParameter2 == NULL) - { - snprintf(pcWriteBuffer, xWriteBufferLen, "Error: Missing parameters\r\n"); - return pdFALSE; - } - - num1 = atoi(pcParameter1); - num2 = atoi(pcParameter2); - - snprintf(pcWriteBuffer, xWriteBufferLen, "Result: %d\r\n", num1 - num2); - return pdFALSE; -} - -static BaseType_t prvEchoCommand(char *pcWriteBuffer, size_t xWriteBufferLen, - const char *pcCommandString) -{ - const char *pcParameter1; - BaseType_t xParameter1Length; - - pcParameter1 = FreeRTOS_CLIGetParameter(pcCommandString, 1, &xParameter1Length); - - if (pcParameter1 == NULL) - { - snprintf(pcWriteBuffer, xWriteBufferLen, "Error: Missing parameters\r\n"); - return pdFALSE; - } - memcpy(pcWriteBuffer, pcParameter1, xWriteBufferLen); - strcat(pcWriteBuffer, "\r\n"); - return pdFALSE; -} - -static const CLI_Command_Definition_t xAddCommand = -{ - "add", - "add :\r\n Adds two numbers.\r\n", - prvAddCommand, - 2 -}; - -static const CLI_Command_Definition_t xSubCommand = -{ - "sub", - "sub :\r\n Subtracts second number from first.\r\n", - prvSubCommand, - 2 -}; - -static const CLI_Command_Definition_t xEchoCommand = -{ - "echo", - "echo :\r\n Echo input message\r\n", - prvEchoCommand, - -1 -}; - -void vRegisterCLICommands(void) -{ - FreeRTOS_CLIRegisterCommand(&xAddCommand); - FreeRTOS_CLIRegisterCommand(&xSubCommand); - FreeRTOS_CLIRegisterCommand(&xEchoCommand); -} - diff --git a/cli/app/cli_sample.c b/cli/app/cli_sample.c deleted file mode 100644 index 07f20e6..0000000 --- a/cli/app/cli_sample.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include "FreeRTOS_CLI.h" -#include -#include -#include - -extern void vRegisterCLICommands(void); - -#define MAX_INPUT_SIZE 60 -#define MAX_OUTPUT_SIZE 256 - -static char cInputBuffer[MAX_INPUT_SIZE]; -static char cOutputBuffer[MAX_OUTPUT_SIZE]; -static char cIsZeroBuffer[MAX_INPUT_SIZE]; - -void vCLITask(void *pvParameters) -{ - - BaseType_t xMoreDataToFollow; - int inputIndex = 0; - char c; - - (void)pvParameters; - - printf("\r\nSTM32#"); - - for (;;) - { - c = getchar(); - - if (c == '\r' || c == '\n') - { - if(!(memcmp(cInputBuffer, cIsZeroBuffer, MAX_INPUT_SIZE))) - { - printf("\r\nSTM32#"); - continue; - } - printf("\r\n"); - do - { - xMoreDataToFollow = FreeRTOS_CLIProcessCommand(cInputBuffer, cOutputBuffer, - MAX_OUTPUT_SIZE); - printf("%s", cOutputBuffer); - } - while (xMoreDataToFollow != pdFALSE); - - memset(cInputBuffer, 0, MAX_INPUT_SIZE); - inputIndex = 0; - printf("STM32#"); - } - else if (isprint((int)c) && inputIndex < MAX_INPUT_SIZE - 1) - { - cInputBuffer[inputIndex++] = c; - putchar(c); - } - else if (c == '\b' && inputIndex > 0) - { - inputIndex--; - cInputBuffer[inputIndex] = '\0'; - printf("\b \b"); - } - } -} - -int cli_task(void) -{ - vRegisterCLICommands(); - - xTaskCreate(vCLITask, "CLI", 1024, NULL, 1, NULL); - - vTaskStartScheduler(); - - while(1) - ; -} - diff --git a/sources/main.c b/sources/main.c index 1e13f93..e8df648 100644 --- a/sources/main.c +++ b/sources/main.c @@ -2,21 +2,22 @@ #include "freertos_tests.h" #include -#define RUN_FREERTOS_TESTS 0 -#define RUN_STM_SAMPLE 0 -#define RUN_CLI_TASK 1 + +#define CLI 1 +#define SAMPLES 2 +#define TESTS 3 void cli_task(); void stm_samples(); int main() { -#if RUN_STM_SAMPLE +#if APP_MODE == CLI + cli_task(); +#elif APP_MODE == SAMPLES stm_samples(); -#elif RUN_FREERTOS_TESTS +#elif APP_MODE == TESTS (void)freertos_tests(); -#elif RUN_CLI_TASK - cli_task(); #else #error "Invalid Source" #endif