Hello,
I need an application with a Bluetooth stack and FreeRTOS to handle different tasks (like button reading, sensor reading, ADC, etc.). So I try to implement the BLE template from the SDK into my project:
#include <stdbool.h> #include <stdint.h> #include "nrf.h" #include "nrf_delay.h" #include "nrf_drv_spi.h" #include "nrf_drv_twi.h" #include "nrf_drv_clock.h" #include "nrf_sdh.h" #include "nrf_sdh_soc.h" #include "nrf_sdh_ble.h" #include "nrf_ble_gatt.h" #include "nrf_ble_qwr.h" #include "nrf_pwr_mgmt.h" #include "nrf_log.h" #include "nrf_log_ctrl.h" #include "nrf_log_default_backends.h" #include "ble.h" #include "ble_hci.h" #include "ble_srv_common.h" #include "ble_advdata.h" #include "ble_advertising.h" #include "ble_conn_params.h" #include "ble_conn_state.h" #include "app_timer.h" #include "fds.h" #include "peer_manager.h" #include "peer_manager_handler.h" #include "FreeRTOS.h" #include "timers.h" #include "boards.h" #include "bsp_btn_ble.h" #include "nordic_common.h" NRF_BLE_GATT_DEF(m_gatt); /**< GATT module instance. */ NRF_BLE_QWR_DEF(m_qwr); /**< Context for the Queued Write module.*/ BLE_ADVERTISING_DEF(m_advertising); /**< Advertising module instance. */ void app_error_fault_handler(uint32_t id, uint32_t pc, uint32_t info); TaskHandle_t Handle_ToggleLED; TimerHandle_t Handle_SecondTick; static void Task_ToggleLED(void* pvParameter); static void Callback_SecondTick(void* pvParameter); static uint16_t BLE_ConnectionHandle = BLE_CONN_HANDLE_INVALID; static ble_uuid_t BLE_UUID[] = { { BLE_UUID_DEVICE_INFORMATION_SERVICE, BLE_UUID_TYPE_BLE } }; /**@brief Initialize the NRF log module. */ static void Init_Log(void) { APP_ERROR_CHECK(NRF_LOG_INIT(NULL)); NRF_LOG_DEFAULT_BACKENDS_INIT(); } /**@brief Initialize the timer module. */ static void Init_Timer(void) { APP_ERROR_CHECK(app_timer_init()); APP_ERROR_CHECK(nrf_drv_clock_init()); } /**@brief Initialize the power management. */ static void Init_PowerManagement(void) { APP_ERROR_CHECK(nrf_pwr_mgmt_init()); } int main(void) { uint8_t sample_data; uint32_t Error; Init_Log(); Init_Timer(); Init_PowerManagement(); bsp_board_init(BSP_INIT_LEDS); NRF_LOG_INFO("Initialize tasks.."); UNUSED_VARIABLE(xTaskCreate(Task_ToggleLED, "LED0", configMINIMAL_STACK_SIZE + 200, NULL, 2, &Handle_ToggleLED)); // Use this timer for the calendar function NRF_LOG_INFO("Starting timer.."); Handle_SecondTick = xTimerCreate("LED1", 1000, pdTRUE, NULL, Callback_SecondTick); UNUSED_VARIABLE(xTimerStart(Handle_SecondTick, 0)); NRF_LOG_FLUSH(); // Start the FreeRTOS scheduler vTaskStartScheduler(); while(true) { } } void Task_ToggleLED(void* pvParameter) { UNUSED_PARAMETER(pvParameter); while(true) { bsp_board_led_invert(BSP_BOARD_LED_0); vTaskDelay(1024); } } void Callback_SecondTick(void* pvParameter) { UNUSED_PARAMETER(pvParameter); bsp_board_led_invert(BSP_BOARD_LED_1); } void app_error_fault_handler(uint32_t id, uint32_t pc, uint32_t info) { while(1) { bsp_board_led_on(0); nrf_delay_ms(500); } }
But I got this error messages:
Building ‘Project’ from solution ‘Trackeffekt’ in configuration ‘Release’ Compiling ‘main.c’ Linking Project.elf Output/Project Release/Obj/app_timer2.o: in function `get_now': undefined reference to `drv_rtc_counter_get' Output/Project Release/Obj/app_timer2.o: in function `app_timer_init': undefined reference to `drv_rtc_init' G:\Freelancing\Project\firmware\nordic\components\libraries\timer/app_timer2.c:543: undefined reference to `drv_rtc_overflow_enable' G:\Freelancing\Project\firmware\nordic\components\libraries\timer/app_timer2.c:544: undefined reference to `drv_rtc_compare_set' Output/Project Release/Obj/app_timer2.o: in function `app_timer_cnt_get': undefined reference to `drv_rtc_counter_get' Output/Project Release/Obj/app_timer2.o: in function `rtc_irq': undefined reference to `drv_rtc_overflow_pending' G:\Freelancing\Project\firmware\nordic\components\libraries\timer/app_timer2.c:463: undefined reference to `drv_rtc_compare_pending' G:\Freelancing\Project\firmware\nordic\components\libraries\timer/app_timer2.c:467: undefined reference to `drv_rtc_compare_pending' Output/Project Release/Obj/app_timer2.o: in function `rtc_schedule': undefined reference to `drv_rtc_windowed_compare_set' Output/Project Release/Obj/app_timer2.o: in function `rtc_update': undefined reference to `drv_rtc_start' Output/Project Release/Obj/app_timer2.o: in function `rtc_schedule': undefined reference to `drv_rtc_compare_disable' Output/Project Release/Obj/app_timer2.o: in function `rtc_update': undefined reference to `drv_rtc_stop' Build failed
What is the problem with this code and how can I fix this?