[FL-1910, FL-2146] Update to new FreeRTOS, fix CMSIS thread flags collision with stream buffer. New cube. (#917)
* Libs: add FreeRTOS submodule. FuriHal: replace ST provided FreeRTOS with original one. FuriHal: for cmsis os hal and patch it for better compatibility with stream buffer. * Makefile: fix svd plugin on blackmagic * Lib: update STM32CubeWB package. Project: update project to match new cube package. * Lib: properly rebase and upload STM32CubeWB * BleGlue: switch ack logging level to trace
This commit is contained in:
		| @@ -1,133 +1,89 @@ | ||||
| /* USER CODE BEGIN Header */ | ||||
| /* | ||||
|  * FreeRTOS Kernel V10.2.1 | ||||
|  * Portion Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved. | ||||
|  * Portion Copyright (C) 2019 StMicroelectronics, Inc.  All Rights Reserved. | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy of | ||||
|  * this software and associated documentation files (the "Software"), to deal in | ||||
|  * the Software without restriction, including without limitation the rights to | ||||
|  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of | ||||
|  * the Software, and to permit persons to whom the Software is furnished to do so, | ||||
|  * subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all | ||||
|  * copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS | ||||
|  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR | ||||
|  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER | ||||
|  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  * | ||||
|  * http://www.FreeRTOS.org | ||||
|  * http://aws.amazon.com/freertos | ||||
|  * | ||||
|  * 1 tab == 4 spaces! | ||||
|  */ | ||||
| /* USER CODE END Header */ | ||||
| #pragma once | ||||
|  | ||||
| #ifndef FREERTOS_CONFIG_H | ||||
| #define FREERTOS_CONFIG_H | ||||
|  | ||||
| /*----------------------------------------------------------- | ||||
|  * Application specific definitions. | ||||
|  * | ||||
|  * These definitions should be adjusted for your particular hardware and | ||||
|  * application requirements. | ||||
|  * | ||||
|  * These parameters and more are described within the 'configuration' section of the | ||||
|  * FreeRTOS API documentation available on the FreeRTOS.org web site. | ||||
|  * | ||||
|  * See http://www.freertos.org/a00110.html | ||||
|  *----------------------------------------------------------*/ | ||||
|  | ||||
| /* USER CODE BEGIN Includes */ | ||||
| /* Section where include file can be added */ | ||||
| /* USER CODE END Includes */ | ||||
|  | ||||
| /* Ensure definitions are only used by the compiler, and not by the assembler. */ | ||||
| #if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__) | ||||
|   #include <stdint.h> | ||||
|   extern uint32_t SystemCoreClock; | ||||
| #include <stdint.h> | ||||
| extern uint32_t SystemCoreClock; | ||||
| #endif | ||||
|  | ||||
| #ifndef CMSIS_device_header | ||||
| #define CMSIS_device_header "stm32wbxx.h" | ||||
| #endif /* CMSIS_device_header */ | ||||
|  | ||||
| #define configENABLE_FPU                         1 | ||||
| #define configENABLE_MPU                         0 | ||||
| #define configENABLE_FPU                            1 | ||||
| #define configENABLE_MPU                            0 | ||||
|  | ||||
| #define configUSE_PREEMPTION                        1 | ||||
| #define configSUPPORT_STATIC_ALLOCATION             0 | ||||
| #define configSUPPORT_DYNAMIC_ALLOCATION            1 | ||||
| #define configUSE_IDLE_HOOK                         0 | ||||
| #define configUSE_TICK_HOOK                         0 | ||||
| #define configCPU_CLOCK_HZ                          ( SystemCoreClock ) | ||||
| #define configTICK_RATE_HZ                          ((TickType_t)1024) | ||||
| #define configMAX_PRIORITIES                        ( 56 ) | ||||
| #define configMINIMAL_STACK_SIZE                    ((uint16_t)128) | ||||
|  | ||||
| #define configUSE_PREEMPTION                     1 | ||||
| #define configSUPPORT_STATIC_ALLOCATION          0 | ||||
| #define configSUPPORT_DYNAMIC_ALLOCATION         1 | ||||
| #define configUSE_IDLE_HOOK                      0 | ||||
| #define configUSE_TICK_HOOK                      0 | ||||
| #define configCPU_CLOCK_HZ                       ( SystemCoreClock ) | ||||
| #define configTICK_RATE_HZ                       ((TickType_t)1024) | ||||
| #define configMAX_PRIORITIES                     ( 56 ) | ||||
| #define configMINIMAL_STACK_SIZE                 ((uint16_t)128) | ||||
| /* Heap size determined automatically by linker */ | ||||
| // #define configTOTAL_HEAP_SIZE                    ((size_t)0) | ||||
| #define configMAX_TASK_NAME_LEN                  ( 16 ) | ||||
| #define configGENERATE_RUN_TIME_STATS            0 | ||||
| #define configUSE_TRACE_FACILITY                 1 | ||||
| #define configUSE_16_BIT_TICKS                   0 | ||||
| #define configUSE_MUTEXES                        1 | ||||
| #define configQUEUE_REGISTRY_SIZE                8 | ||||
| #define configCHECK_FOR_STACK_OVERFLOW           1 | ||||
| #define configUSE_RECURSIVE_MUTEXES              1 | ||||
| #define configUSE_COUNTING_SEMAPHORES            1 | ||||
| #define configENABLE_BACKWARD_COMPATIBILITY      0 | ||||
| #define configUSE_PORT_OPTIMISED_TASK_SELECTION  0 | ||||
| #define configUSE_TICKLESS_IDLE                  2 | ||||
| #define configRECORD_STACK_HIGH_ADDRESS          1 | ||||
| #define configUSE_NEWLIB_REENTRANT               0 | ||||
| /* USER CODE BEGIN MESSAGE_BUFFER_LENGTH_TYPE */ | ||||
| #define configMAX_TASK_NAME_LEN                     ( 16 ) | ||||
| #define configGENERATE_RUN_TIME_STATS               0 | ||||
| #define configUSE_TRACE_FACILITY                    1 | ||||
| #define configUSE_16_BIT_TICKS                      0 | ||||
| #define configUSE_MUTEXES                           1 | ||||
| #define configQUEUE_REGISTRY_SIZE                   8 | ||||
| #define configCHECK_FOR_STACK_OVERFLOW              1 | ||||
| #define configUSE_RECURSIVE_MUTEXES                 1 | ||||
| #define configUSE_COUNTING_SEMAPHORES               1 | ||||
| #define configENABLE_BACKWARD_COMPATIBILITY         0 | ||||
| #define configUSE_PORT_OPTIMISED_TASK_SELECTION     0 | ||||
| #define configUSE_TICKLESS_IDLE                     2 | ||||
| #define configRECORD_STACK_HIGH_ADDRESS             1 | ||||
| #define configUSE_NEWLIB_REENTRANT                  0 | ||||
|  | ||||
| /* Defaults to size_t for backward compatibility, but can be changed | ||||
|    if lengths will always be less than the number of bytes in a size_t. */ | ||||
| #define configMESSAGE_BUFFER_LENGTH_TYPE         size_t | ||||
| #define configNUM_THREAD_LOCAL_STORAGE_POINTERS 1 | ||||
| #define configEXPECTED_IDLE_TIME_BEFORE_SLEEP   8 | ||||
| /* USER CODE END MESSAGE_BUFFER_LENGTH_TYPE */ | ||||
| #define configMESSAGE_BUFFER_LENGTH_TYPE            size_t | ||||
| #define configNUM_THREAD_LOCAL_STORAGE_POINTERS     1 | ||||
| #define configEXPECTED_IDLE_TIME_BEFORE_SLEEP       4 | ||||
|  | ||||
| /* Co-routine definitions. */ | ||||
| #define configUSE_CO_ROUTINES                    0 | ||||
| #define configMAX_CO_ROUTINE_PRIORITIES          ( 2 ) | ||||
| #define configUSE_CO_ROUTINES                       0 | ||||
|  | ||||
| /* Software timer definitions. */ | ||||
| #define configUSE_TIMERS                         1 | ||||
| #define configTIMER_TASK_PRIORITY                ( 2 ) | ||||
| #define configTIMER_QUEUE_LENGTH                 32 | ||||
| #define configTIMER_TASK_STACK_DEPTH             256 | ||||
| #define configTIMER_SERVICE_TASK_NAME          "TimersSrv" | ||||
| #define configUSE_TIMERS                            1 | ||||
| #define configTIMER_TASK_PRIORITY                   ( 2 ) | ||||
| #define configTIMER_QUEUE_LENGTH                    32 | ||||
| #define configTIMER_TASK_STACK_DEPTH                256 | ||||
| #define configTIMER_SERVICE_TASK_NAME               "TimersSrv" | ||||
|  | ||||
| #define configIDLE_TASK_NAME                  "(-_-)" | ||||
| #define configIDLE_TASK_NAME                        "(-_-)" | ||||
|  | ||||
| /* Set the following definitions to 1 to include the API function, or zero | ||||
| to exclude the API function. */ | ||||
| #define INCLUDE_eTaskGetState                1 | ||||
| #define INCLUDE_uxTaskGetStackHighWaterMark  1 | ||||
| #define INCLUDE_uxTaskPriorityGet            1 | ||||
| #define INCLUDE_vTaskCleanUpResources        0 | ||||
| #define INCLUDE_vTaskDelay                   1 | ||||
| #define INCLUDE_vTaskDelayUntil              1 | ||||
| #define INCLUDE_vTaskDelete                  1 | ||||
| #define INCLUDE_vTaskPrioritySet             1 | ||||
| #define INCLUDE_vTaskSuspend                 1 | ||||
| #define INCLUDE_xQueueGetMutexHolder         1 | ||||
| #define INCLUDE_xTaskGetCurrentTaskHandle    1 | ||||
| #define INCLUDE_xTaskGetSchedulerState       1 | ||||
| #define INCLUDE_xTimerPendFunctionCall       1 | ||||
| #define INCLUDE_eTaskGetState                       1 | ||||
| #define INCLUDE_uxTaskGetStackHighWaterMark         1 | ||||
| #define INCLUDE_uxTaskPriorityGet                   1 | ||||
| #define INCLUDE_vTaskCleanUpResources               0 | ||||
| #define INCLUDE_vTaskDelay                          1 | ||||
| #define INCLUDE_vTaskDelayUntil                     1 | ||||
| #define INCLUDE_vTaskDelete                         1 | ||||
| #define INCLUDE_vTaskPrioritySet                    1 | ||||
| #define INCLUDE_vTaskSuspend                        1 | ||||
| #define INCLUDE_xQueueGetMutexHolder                1 | ||||
| #define INCLUDE_xTaskGetCurrentTaskHandle           1 | ||||
| #define INCLUDE_xTaskGetSchedulerState              1 | ||||
| #define INCLUDE_xTimerPendFunctionCall              1 | ||||
|  | ||||
| /* CMSIS-RTOS V2 flags */ | ||||
| #define configUSE_OS2_THREAD_SUSPEND_RESUME  1 | ||||
| #define configUSE_OS2_THREAD_ENUMERATE       1 | ||||
| #define configUSE_OS2_EVENTFLAGS_FROM_ISR    1 | ||||
| #define configUSE_OS2_THREAD_FLAGS           1 | ||||
| #define configUSE_OS2_TIMER                  1 | ||||
| #define configUSE_OS2_MUTEX                  1 | ||||
| #define configUSE_OS2_THREAD_SUSPEND_RESUME         1 | ||||
| #define configUSE_OS2_THREAD_ENUMERATE              1 | ||||
| #define configUSE_OS2_EVENTFLAGS_FROM_ISR           1 | ||||
| #define configUSE_OS2_THREAD_FLAGS                  1 | ||||
| #define configUSE_OS2_TIMER                         1 | ||||
| #define configUSE_OS2_MUTEX                         1 | ||||
|  | ||||
| /* CMSIS-RTOS */ | ||||
| #define configTASK_NOTIFICATION_ARRAY_ENTRIES       2 | ||||
| #define CMSIS_TASK_NOTIFY_INDEX 1 | ||||
|  | ||||
| /* | ||||
|  * The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used | ||||
| @@ -137,15 +93,15 @@ to exclude the API function. */ | ||||
|  | ||||
| /* Cortex-M specific definitions. */ | ||||
| #ifdef __NVIC_PRIO_BITS | ||||
|  /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */ | ||||
|  #define configPRIO_BITS         __NVIC_PRIO_BITS | ||||
|     /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */ | ||||
|     #define configPRIO_BITS                         __NVIC_PRIO_BITS | ||||
| #else | ||||
|  #define configPRIO_BITS         4 | ||||
|     #define configPRIO_BITS                         4 | ||||
| #endif | ||||
|  | ||||
| /* The lowest interrupt priority that can be used in a call to a "set priority" | ||||
| function. */ | ||||
| #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY   15 | ||||
| #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY     15 | ||||
|  | ||||
| /* The highest interrupt priority that can be used by any interrupt service | ||||
| routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL | ||||
| @@ -155,29 +111,20 @@ PRIORITY THAN THIS! (higher priorities are lower numeric values. */ | ||||
|  | ||||
| /* Interrupt priorities used by the kernel port layer itself.  These are generic | ||||
| to all Cortex-M ports, and do not rely on any particular library functions. */ | ||||
| #define configKERNEL_INTERRUPT_PRIORITY         ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) | ||||
| #define configKERNEL_INTERRUPT_PRIORITY             ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) | ||||
|  | ||||
| /* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!! | ||||
| See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */ | ||||
| #define configMAX_SYSCALL_INTERRUPT_PRIORITY    ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) | ||||
| #define configMAX_SYSCALL_INTERRUPT_PRIORITY        ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) | ||||
|  | ||||
| /* Normal assert() semantics without relying on the provision of an assert.h | ||||
| header file. */ | ||||
| /* USER CODE BEGIN 1 */ | ||||
| #define configASSERT( x ) if ((x) == 0) {taskDISABLE_INTERRUPTS(); asm("bkpt 1"); for( ;; );} | ||||
| /* USER CODE END 1 */ | ||||
| #define configASSERT( x ) if ((x) == 0) { taskDISABLE_INTERRUPTS(); asm("bkpt 1"); for( ;; ); } | ||||
|  | ||||
| /* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS | ||||
| standard names. */ | ||||
| #define vPortSVCHandler    SVC_Handler | ||||
| #define xPortPendSVHandler PendSV_Handler | ||||
|  | ||||
| /* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */ | ||||
|  | ||||
| #define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 1 | ||||
|  | ||||
| /* USER CODE BEGIN Defines */ | ||||
| /* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */ | ||||
| #define configOVERRIDE_DEFAULT_TICK_CONFIGURATION 1  /* required only for Keil but does not hurt otherwise */ | ||||
| /* USER CODE END Defines */ | ||||
|  | ||||
| #endif /* FREERTOS_CONFIG_H */ | ||||
|   | ||||
| @@ -1,21 +0,0 @@ | ||||
|  | ||||
| /* | ||||
|  * Since at least FreeRTOS V7.5.3 uxTopUsedPriority is no longer | ||||
|  * present in the kernel, so it has to be supplied by other means for | ||||
|  * OpenOCD's threads awareness. | ||||
|  * | ||||
|  * Add this file to your project, and, if you're using --gc-sections, | ||||
|  * ``--undefined=uxTopUsedPriority'' (or | ||||
|  * ``-Wl,--undefined=uxTopUsedPriority'' when using gcc for final | ||||
|  * linking) to your LDFLAGS; same with all the other symbols you need. | ||||
|  */ | ||||
|  | ||||
| #include "FreeRTOS.h" | ||||
|  | ||||
| #ifdef __GNUC__ | ||||
| #define USED __attribute__((used)) | ||||
| #else | ||||
| #define USED | ||||
| #endif | ||||
|  | ||||
| const int USED uxTopUsedPriority = configMAX_PRIORITIES - 1; | ||||
| @@ -3,7 +3,6 @@ | ||||
| #include "hci_tl.h" | ||||
| #include "ble.h" | ||||
| #include "shci.h" | ||||
| #include "cmsis_os.h" | ||||
| #include "gap.h" | ||||
|  | ||||
| #include <furi-hal.h> | ||||
|   | ||||
| @@ -5,7 +5,6 @@ | ||||
| #include "ble.h" | ||||
| #include "tl.h" | ||||
| #include "shci.h" | ||||
| #include "cmsis_os.h" | ||||
| #include "shci_tl.h" | ||||
| #include "app_debug.h" | ||||
| #include <furi-hal.h> | ||||
|   | ||||
| @@ -2,7 +2,6 @@ | ||||
|  | ||||
| #include "ble.h" | ||||
|  | ||||
| #include "cmsis_os.h" | ||||
| #include <furi-hal.h> | ||||
| #include <furi.h> | ||||
|  | ||||
| @@ -28,7 +27,7 @@ typedef struct { | ||||
|     osMutexId_t state_mutex; | ||||
|     BleEventCallback on_event_cb; | ||||
|     void* context; | ||||
|     osTimerId advertise_timer; | ||||
|     osTimerId_t advertise_timer; | ||||
|     FuriThread* thread; | ||||
|     osMessageQueueId_t command_queue; | ||||
|     bool enable_adv; | ||||
| @@ -446,7 +445,7 @@ void gap_thread_stop() { | ||||
| static int32_t gap_app(void *context) { | ||||
|     GapCommand command; | ||||
|     while(1) { | ||||
|         osStatus status = osMessageQueueGet(gap->command_queue, &command, NULL, osWaitForever); | ||||
|         osStatus_t status = osMessageQueueGet(gap->command_queue, &command, NULL, osWaitForever); | ||||
|         if(status != osOK) { | ||||
|             FURI_LOG_E(TAG, "Message queue get error: %d", status); | ||||
|             continue; | ||||
|   | ||||
| @@ -62,7 +62,7 @@ static SVCCTL_EvtAckStatus_t serial_svc_event_handler(void *event) { | ||||
|                 ret = SVCCTL_EvtAckFlowEnable; | ||||
|             } | ||||
|         } else if(blecore_evt->ecode == ACI_GATT_SERVER_CONFIRMATION_VSEVT_CODE) { | ||||
|             FURI_LOG_D(TAG, "Ack received", blecore_evt->ecode); | ||||
|             FURI_LOG_T(TAG, "Ack received", blecore_evt->ecode); | ||||
|             if(serial_svc->callback) { | ||||
|                 SerialServiceEvent event = { | ||||
|                     .event = SerialServiceEventTypeDataSent, | ||||
|   | ||||
| @@ -26,7 +26,6 @@ | ||||
|  | ||||
| #include "main.h" | ||||
| #include "stm32wbxx_hal.h" | ||||
| #include "cmsis_os.h" /* _FS_REENTRANT set to 1 and CMSIS API chosen */ | ||||
|  | ||||
| /*-----------------------------------------------------------------------------/ | ||||
| / Function Configurations | ||||
|   | ||||
| @@ -43,7 +43,7 @@ void furi_hal_os_init() { | ||||
|     LL_GPIO_SetPinMode(LED_TICK_PORT, LED_TICK_PIN, LL_GPIO_MODE_OUTPUT); | ||||
|     LL_GPIO_SetPinMode(LED_SECOND_PORT, LED_SECOND_PIN, LL_GPIO_MODE_OUTPUT); | ||||
|     osTimerId_t second_timer = osTimerNew(furi_hal_os_timer_callback, osTimerPeriodic, NULL, NULL); | ||||
|     osTimerStart(second_timer, 1024); | ||||
|     osTimerStart(second_timer, FURI_HAL_OS_TICK_PER_SECOND); | ||||
| #endif | ||||
|  | ||||
|     FURI_LOG_I(TAG, "Init OK"); | ||||
| @@ -139,7 +139,7 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) { | ||||
|     __enable_irq(); | ||||
| } | ||||
|  | ||||
| void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName) { | ||||
| void vApplicationStackOverflowHook(TaskHandle_t xTask, char * pcTaskName) { | ||||
|     asm("bkpt 1"); | ||||
|     while(1) {}; | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,3 @@ | ||||
| #include "cmsis_os.h" | ||||
| #include "furi-hal-task.h" | ||||
|  | ||||
| //-----------------------------cmsis_os2.c------------------------------- | ||||
|   | ||||
| @@ -75,18 +75,19 @@ C_SOURCES += \ | ||||
|  | ||||
| # FreeRTOS | ||||
| CFLAGS += \ | ||||
| 	-I$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/include \ | ||||
| 	-I$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 \ | ||||
| 	-I$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F | ||||
| 	-I$(LIB_DIR)/FreeRTOS-Kernel/include \ | ||||
| 	-I$(LIB_DIR)/FreeRTOS-Kernel/portable/GCC/ARM_CM4F \ | ||||
| 	-I$(LIB_DIR)/FreeRTOS-glue/ | ||||
|  | ||||
| C_SOURCES += \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/list.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/queue.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/tasks.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/timers.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/event_groups.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/list.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/queue.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/stream_buffer.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/tasks.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/timers.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/portable/GCC/ARM_CM4F/port.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-glue/cmsis_os2.c \ | ||||
|  | ||||
| # BLE glue  | ||||
| CFLAGS += \ | ||||
|   | ||||
| @@ -1,133 +1,89 @@ | ||||
| /* USER CODE BEGIN Header */ | ||||
| /* | ||||
|  * FreeRTOS Kernel V10.2.1 | ||||
|  * Portion Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved. | ||||
|  * Portion Copyright (C) 2019 StMicroelectronics, Inc.  All Rights Reserved. | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy of | ||||
|  * this software and associated documentation files (the "Software"), to deal in | ||||
|  * the Software without restriction, including without limitation the rights to | ||||
|  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of | ||||
|  * the Software, and to permit persons to whom the Software is furnished to do so, | ||||
|  * subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all | ||||
|  * copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS | ||||
|  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR | ||||
|  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER | ||||
|  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  * | ||||
|  * http://www.FreeRTOS.org | ||||
|  * http://aws.amazon.com/freertos | ||||
|  * | ||||
|  * 1 tab == 4 spaces! | ||||
|  */ | ||||
| /* USER CODE END Header */ | ||||
| #pragma once | ||||
|  | ||||
| #ifndef FREERTOS_CONFIG_H | ||||
| #define FREERTOS_CONFIG_H | ||||
|  | ||||
| /*----------------------------------------------------------- | ||||
|  * Application specific definitions. | ||||
|  * | ||||
|  * These definitions should be adjusted for your particular hardware and | ||||
|  * application requirements. | ||||
|  * | ||||
|  * These parameters and more are described within the 'configuration' section of the | ||||
|  * FreeRTOS API documentation available on the FreeRTOS.org web site. | ||||
|  * | ||||
|  * See http://www.freertos.org/a00110.html | ||||
|  *----------------------------------------------------------*/ | ||||
|  | ||||
| /* USER CODE BEGIN Includes */ | ||||
| /* Section where include file can be added */ | ||||
| /* USER CODE END Includes */ | ||||
|  | ||||
| /* Ensure definitions are only used by the compiler, and not by the assembler. */ | ||||
| #if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__) | ||||
|   #include <stdint.h> | ||||
|   extern uint32_t SystemCoreClock; | ||||
| #include <stdint.h> | ||||
| extern uint32_t SystemCoreClock; | ||||
| #endif | ||||
|  | ||||
| #ifndef CMSIS_device_header | ||||
| #define CMSIS_device_header "stm32wbxx.h" | ||||
| #endif /* CMSIS_device_header */ | ||||
|  | ||||
| #define configENABLE_FPU                         1 | ||||
| #define configENABLE_MPU                         0 | ||||
| #define configENABLE_FPU                            1 | ||||
| #define configENABLE_MPU                            0 | ||||
|  | ||||
| #define configUSE_PREEMPTION                        1 | ||||
| #define configSUPPORT_STATIC_ALLOCATION             0 | ||||
| #define configSUPPORT_DYNAMIC_ALLOCATION            1 | ||||
| #define configUSE_IDLE_HOOK                         0 | ||||
| #define configUSE_TICK_HOOK                         0 | ||||
| #define configCPU_CLOCK_HZ                          ( SystemCoreClock ) | ||||
| #define configTICK_RATE_HZ                          ((TickType_t)1024) | ||||
| #define configMAX_PRIORITIES                        ( 56 ) | ||||
| #define configMINIMAL_STACK_SIZE                    ((uint16_t)128) | ||||
|  | ||||
| #define configUSE_PREEMPTION                     1 | ||||
| #define configSUPPORT_STATIC_ALLOCATION          0 | ||||
| #define configSUPPORT_DYNAMIC_ALLOCATION         1 | ||||
| #define configUSE_IDLE_HOOK                      0 | ||||
| #define configUSE_TICK_HOOK                      0 | ||||
| #define configCPU_CLOCK_HZ                       ( SystemCoreClock ) | ||||
| #define configTICK_RATE_HZ                       ((TickType_t)1024) | ||||
| #define configMAX_PRIORITIES                     ( 56 ) | ||||
| #define configMINIMAL_STACK_SIZE                 ((uint16_t)128) | ||||
| /* Heap size determined automatically by linker */ | ||||
| // #define configTOTAL_HEAP_SIZE                    ((size_t)0) | ||||
| #define configMAX_TASK_NAME_LEN                  ( 16 ) | ||||
| #define configGENERATE_RUN_TIME_STATS            0 | ||||
| #define configUSE_TRACE_FACILITY                 1 | ||||
| #define configUSE_16_BIT_TICKS                   0 | ||||
| #define configUSE_MUTEXES                        1 | ||||
| #define configQUEUE_REGISTRY_SIZE                8 | ||||
| #define configCHECK_FOR_STACK_OVERFLOW           1 | ||||
| #define configUSE_RECURSIVE_MUTEXES              1 | ||||
| #define configUSE_COUNTING_SEMAPHORES            1 | ||||
| #define configENABLE_BACKWARD_COMPATIBILITY      0 | ||||
| #define configUSE_PORT_OPTIMISED_TASK_SELECTION  0 | ||||
| #define configUSE_TICKLESS_IDLE                  2 | ||||
| #define configRECORD_STACK_HIGH_ADDRESS          1 | ||||
| #define configUSE_NEWLIB_REENTRANT               0 | ||||
| /* USER CODE BEGIN MESSAGE_BUFFER_LENGTH_TYPE */ | ||||
| #define configMAX_TASK_NAME_LEN                     ( 16 ) | ||||
| #define configGENERATE_RUN_TIME_STATS               0 | ||||
| #define configUSE_TRACE_FACILITY                    1 | ||||
| #define configUSE_16_BIT_TICKS                      0 | ||||
| #define configUSE_MUTEXES                           1 | ||||
| #define configQUEUE_REGISTRY_SIZE                   8 | ||||
| #define configCHECK_FOR_STACK_OVERFLOW              1 | ||||
| #define configUSE_RECURSIVE_MUTEXES                 1 | ||||
| #define configUSE_COUNTING_SEMAPHORES               1 | ||||
| #define configENABLE_BACKWARD_COMPATIBILITY         0 | ||||
| #define configUSE_PORT_OPTIMISED_TASK_SELECTION     0 | ||||
| #define configUSE_TICKLESS_IDLE                     2 | ||||
| #define configRECORD_STACK_HIGH_ADDRESS             1 | ||||
| #define configUSE_NEWLIB_REENTRANT                  0 | ||||
|  | ||||
| /* Defaults to size_t for backward compatibility, but can be changed | ||||
|    if lengths will always be less than the number of bytes in a size_t. */ | ||||
| #define configMESSAGE_BUFFER_LENGTH_TYPE         size_t | ||||
| #define configNUM_THREAD_LOCAL_STORAGE_POINTERS 1 | ||||
| #define configEXPECTED_IDLE_TIME_BEFORE_SLEEP   8 | ||||
| /* USER CODE END MESSAGE_BUFFER_LENGTH_TYPE */ | ||||
| #define configMESSAGE_BUFFER_LENGTH_TYPE            size_t | ||||
| #define configNUM_THREAD_LOCAL_STORAGE_POINTERS     1 | ||||
| #define configEXPECTED_IDLE_TIME_BEFORE_SLEEP       4 | ||||
|  | ||||
| /* Co-routine definitions. */ | ||||
| #define configUSE_CO_ROUTINES                    0 | ||||
| #define configMAX_CO_ROUTINE_PRIORITIES          ( 2 ) | ||||
| #define configUSE_CO_ROUTINES                       0 | ||||
|  | ||||
| /* Software timer definitions. */ | ||||
| #define configUSE_TIMERS                         1 | ||||
| #define configTIMER_TASK_PRIORITY                ( 2 ) | ||||
| #define configTIMER_QUEUE_LENGTH                 32 | ||||
| #define configTIMER_TASK_STACK_DEPTH             256 | ||||
| #define configTIMER_SERVICE_TASK_NAME          "TimersSrv" | ||||
| #define configUSE_TIMERS                            1 | ||||
| #define configTIMER_TASK_PRIORITY                   ( 2 ) | ||||
| #define configTIMER_QUEUE_LENGTH                    32 | ||||
| #define configTIMER_TASK_STACK_DEPTH                256 | ||||
| #define configTIMER_SERVICE_TASK_NAME               "TimersSrv" | ||||
|  | ||||
| #define configIDLE_TASK_NAME                  "(-_-)" | ||||
| #define configIDLE_TASK_NAME                        "(-_-)" | ||||
|  | ||||
| /* Set the following definitions to 1 to include the API function, or zero | ||||
| to exclude the API function. */ | ||||
| #define INCLUDE_eTaskGetState                1 | ||||
| #define INCLUDE_uxTaskGetStackHighWaterMark  1 | ||||
| #define INCLUDE_uxTaskPriorityGet            1 | ||||
| #define INCLUDE_vTaskCleanUpResources        0 | ||||
| #define INCLUDE_vTaskDelay                   1 | ||||
| #define INCLUDE_vTaskDelayUntil              1 | ||||
| #define INCLUDE_vTaskDelete                  1 | ||||
| #define INCLUDE_vTaskPrioritySet             1 | ||||
| #define INCLUDE_vTaskSuspend                 1 | ||||
| #define INCLUDE_xQueueGetMutexHolder         1 | ||||
| #define INCLUDE_xTaskGetCurrentTaskHandle    1 | ||||
| #define INCLUDE_xTaskGetSchedulerState       1 | ||||
| #define INCLUDE_xTimerPendFunctionCall       1 | ||||
| #define INCLUDE_eTaskGetState                       1 | ||||
| #define INCLUDE_uxTaskGetStackHighWaterMark         1 | ||||
| #define INCLUDE_uxTaskPriorityGet                   1 | ||||
| #define INCLUDE_vTaskCleanUpResources               0 | ||||
| #define INCLUDE_vTaskDelay                          1 | ||||
| #define INCLUDE_vTaskDelayUntil                     1 | ||||
| #define INCLUDE_vTaskDelete                         1 | ||||
| #define INCLUDE_vTaskPrioritySet                    1 | ||||
| #define INCLUDE_vTaskSuspend                        1 | ||||
| #define INCLUDE_xQueueGetMutexHolder                1 | ||||
| #define INCLUDE_xTaskGetCurrentTaskHandle           1 | ||||
| #define INCLUDE_xTaskGetSchedulerState              1 | ||||
| #define INCLUDE_xTimerPendFunctionCall              1 | ||||
|  | ||||
| /* CMSIS-RTOS V2 flags */ | ||||
| #define configUSE_OS2_THREAD_SUSPEND_RESUME  1 | ||||
| #define configUSE_OS2_THREAD_ENUMERATE       1 | ||||
| #define configUSE_OS2_EVENTFLAGS_FROM_ISR    1 | ||||
| #define configUSE_OS2_THREAD_FLAGS           1 | ||||
| #define configUSE_OS2_TIMER                  1 | ||||
| #define configUSE_OS2_MUTEX                  1 | ||||
| #define configUSE_OS2_THREAD_SUSPEND_RESUME         1 | ||||
| #define configUSE_OS2_THREAD_ENUMERATE              1 | ||||
| #define configUSE_OS2_EVENTFLAGS_FROM_ISR           1 | ||||
| #define configUSE_OS2_THREAD_FLAGS                  1 | ||||
| #define configUSE_OS2_TIMER                         1 | ||||
| #define configUSE_OS2_MUTEX                         1 | ||||
|  | ||||
| /* CMSIS-RTOS */ | ||||
| #define configTASK_NOTIFICATION_ARRAY_ENTRIES       2 | ||||
| #define CMSIS_TASK_NOTIFY_INDEX 1 | ||||
|  | ||||
| /* | ||||
|  * The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used | ||||
| @@ -137,15 +93,15 @@ to exclude the API function. */ | ||||
|  | ||||
| /* Cortex-M specific definitions. */ | ||||
| #ifdef __NVIC_PRIO_BITS | ||||
|  /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */ | ||||
|  #define configPRIO_BITS         __NVIC_PRIO_BITS | ||||
|     /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */ | ||||
|     #define configPRIO_BITS                         __NVIC_PRIO_BITS | ||||
| #else | ||||
|  #define configPRIO_BITS         4 | ||||
|     #define configPRIO_BITS                         4 | ||||
| #endif | ||||
|  | ||||
| /* The lowest interrupt priority that can be used in a call to a "set priority" | ||||
| function. */ | ||||
| #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY   15 | ||||
| #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY     15 | ||||
|  | ||||
| /* The highest interrupt priority that can be used by any interrupt service | ||||
| routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL | ||||
| @@ -155,29 +111,20 @@ PRIORITY THAN THIS! (higher priorities are lower numeric values. */ | ||||
|  | ||||
| /* Interrupt priorities used by the kernel port layer itself.  These are generic | ||||
| to all Cortex-M ports, and do not rely on any particular library functions. */ | ||||
| #define configKERNEL_INTERRUPT_PRIORITY         ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) | ||||
| #define configKERNEL_INTERRUPT_PRIORITY             ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) | ||||
|  | ||||
| /* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!! | ||||
| See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */ | ||||
| #define configMAX_SYSCALL_INTERRUPT_PRIORITY    ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) | ||||
| #define configMAX_SYSCALL_INTERRUPT_PRIORITY        ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) | ||||
|  | ||||
| /* Normal assert() semantics without relying on the provision of an assert.h | ||||
| header file. */ | ||||
| /* USER CODE BEGIN 1 */ | ||||
| #define configASSERT( x ) if ((x) == 0) {taskDISABLE_INTERRUPTS(); asm("bkpt 1"); for( ;; );} | ||||
| /* USER CODE END 1 */ | ||||
| #define configASSERT( x ) if ((x) == 0) { taskDISABLE_INTERRUPTS(); asm("bkpt 1"); for( ;; ); } | ||||
|  | ||||
| /* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS | ||||
| standard names. */ | ||||
| #define vPortSVCHandler    SVC_Handler | ||||
| #define xPortPendSVHandler PendSV_Handler | ||||
|  | ||||
| /* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */ | ||||
|  | ||||
| #define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 1 | ||||
|  | ||||
| /* USER CODE BEGIN Defines */ | ||||
| /* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */ | ||||
| #define configOVERRIDE_DEFAULT_TICK_CONFIGURATION 1  /* required only for Keil but does not hurt otherwise */ | ||||
| /* USER CODE END Defines */ | ||||
|  | ||||
| #endif /* FREERTOS_CONFIG_H */ | ||||
|   | ||||
| @@ -1,21 +0,0 @@ | ||||
|  | ||||
| /* | ||||
|  * Since at least FreeRTOS V7.5.3 uxTopUsedPriority is no longer | ||||
|  * present in the kernel, so it has to be supplied by other means for | ||||
|  * OpenOCD's threads awareness. | ||||
|  * | ||||
|  * Add this file to your project, and, if you're using --gc-sections, | ||||
|  * ``--undefined=uxTopUsedPriority'' (or | ||||
|  * ``-Wl,--undefined=uxTopUsedPriority'' when using gcc for final | ||||
|  * linking) to your LDFLAGS; same with all the other symbols you need. | ||||
|  */ | ||||
|  | ||||
| #include "FreeRTOS.h" | ||||
|  | ||||
| #ifdef __GNUC__ | ||||
| #define USED __attribute__((used)) | ||||
| #else | ||||
| #define USED | ||||
| #endif | ||||
|  | ||||
| const int USED uxTopUsedPriority = configMAX_PRIORITIES - 1; | ||||
| @@ -3,7 +3,6 @@ | ||||
| #include "hci_tl.h" | ||||
| #include "ble.h" | ||||
| #include "shci.h" | ||||
| #include "cmsis_os.h" | ||||
| #include "gap.h" | ||||
|  | ||||
| #include <furi-hal.h> | ||||
|   | ||||
| @@ -5,7 +5,6 @@ | ||||
| #include "ble.h" | ||||
| #include "tl.h" | ||||
| #include "shci.h" | ||||
| #include "cmsis_os.h" | ||||
| #include "shci_tl.h" | ||||
| #include "app_debug.h" | ||||
| #include <furi-hal.h> | ||||
|   | ||||
| @@ -2,7 +2,6 @@ | ||||
|  | ||||
| #include "ble.h" | ||||
|  | ||||
| #include "cmsis_os.h" | ||||
| #include <furi-hal.h> | ||||
| #include <furi.h> | ||||
|  | ||||
| @@ -28,7 +27,7 @@ typedef struct { | ||||
|     osMutexId_t state_mutex; | ||||
|     BleEventCallback on_event_cb; | ||||
|     void* context; | ||||
|     osTimerId advertise_timer; | ||||
|     osTimerId_t advertise_timer; | ||||
|     FuriThread* thread; | ||||
|     osMessageQueueId_t command_queue; | ||||
|     bool enable_adv; | ||||
| @@ -446,7 +445,7 @@ void gap_thread_stop() { | ||||
| static int32_t gap_app(void *context) { | ||||
|     GapCommand command; | ||||
|     while(1) { | ||||
|         osStatus status = osMessageQueueGet(gap->command_queue, &command, NULL, osWaitForever); | ||||
|         osStatus_t status = osMessageQueueGet(gap->command_queue, &command, NULL, osWaitForever); | ||||
|         if(status != osOK) { | ||||
|             FURI_LOG_E(TAG, "Message queue get error: %d", status); | ||||
|             continue; | ||||
|   | ||||
| @@ -62,7 +62,7 @@ static SVCCTL_EvtAckStatus_t serial_svc_event_handler(void *event) { | ||||
|                 ret = SVCCTL_EvtAckFlowEnable; | ||||
|             } | ||||
|         } else if(blecore_evt->ecode == ACI_GATT_SERVER_CONFIRMATION_VSEVT_CODE) { | ||||
|             FURI_LOG_D(TAG, "Ack received", blecore_evt->ecode); | ||||
|             FURI_LOG_T(TAG, "Ack received", blecore_evt->ecode); | ||||
|             if(serial_svc->callback) { | ||||
|                 SerialServiceEvent event = { | ||||
|                     .event = SerialServiceEventTypeDataSent, | ||||
|   | ||||
| @@ -26,7 +26,6 @@ | ||||
|  | ||||
| #include "main.h" | ||||
| #include "stm32wbxx_hal.h" | ||||
| #include "cmsis_os.h" /* _FS_REENTRANT set to 1 and CMSIS API chosen */ | ||||
|  | ||||
| /*-----------------------------------------------------------------------------/ | ||||
| / Function Configurations | ||||
|   | ||||
| @@ -43,7 +43,7 @@ void furi_hal_os_init() { | ||||
|     LL_GPIO_SetPinMode(LED_TICK_PORT, LED_TICK_PIN, LL_GPIO_MODE_OUTPUT); | ||||
|     LL_GPIO_SetPinMode(LED_SECOND_PORT, LED_SECOND_PIN, LL_GPIO_MODE_OUTPUT); | ||||
|     osTimerId_t second_timer = osTimerNew(furi_hal_os_timer_callback, osTimerPeriodic, NULL, NULL); | ||||
|     osTimerStart(second_timer, 1024); | ||||
|     osTimerStart(second_timer, FURI_HAL_OS_TICK_PER_SECOND); | ||||
| #endif | ||||
|  | ||||
|     FURI_LOG_I(TAG, "Init OK"); | ||||
| @@ -139,7 +139,7 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) { | ||||
|     __enable_irq(); | ||||
| } | ||||
|  | ||||
| void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName) { | ||||
| void vApplicationStackOverflowHook(TaskHandle_t xTask, char * pcTaskName) { | ||||
|     asm("bkpt 1"); | ||||
|     while(1) {}; | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,3 @@ | ||||
| #include "cmsis_os.h" | ||||
| #include "furi-hal-task.h" | ||||
|  | ||||
| //-----------------------------cmsis_os2.c------------------------------- | ||||
|   | ||||
| @@ -75,18 +75,19 @@ C_SOURCES += \ | ||||
|  | ||||
| # FreeRTOS | ||||
| CFLAGS += \ | ||||
| 	-I$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/include \ | ||||
| 	-I$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 \ | ||||
| 	-I$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F | ||||
| 	-I$(LIB_DIR)/FreeRTOS-Kernel/include \ | ||||
| 	-I$(LIB_DIR)/FreeRTOS-Kernel/portable/GCC/ARM_CM4F \ | ||||
| 	-I$(LIB_DIR)/FreeRTOS-glue/ | ||||
|  | ||||
| C_SOURCES += \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/list.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/queue.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/tasks.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/timers.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \ | ||||
| 	$(CUBE_DIR)/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/event_groups.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/list.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/queue.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/stream_buffer.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/tasks.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/timers.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-Kernel/portable/GCC/ARM_CM4F/port.c \ | ||||
| 	$(LIB_DIR)/FreeRTOS-glue/cmsis_os2.c \ | ||||
|  | ||||
| # BLE glue  | ||||
| CFLAGS += \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user