nrf52832 - freertos例程

nrf52832的最新sdk(nRF5_SDK_12.1.0)给出了freertos的例程,使用操作系统可以开发出复杂的系统,同时可以降低开发的难度。


注意:该版本sdk需要配合s132_nrf52_3.0.0的softdevice使用


1、利用该demo做测试,打开了自带的rtt调试信息功能,然后新建了自己的task,发现程序运行不起来,然后看freertos配置文件FreeRTOSConfig.h,发现以下宏定义:

#define configTOTAL_HEAP_SIZE                                                     ( 4096 )


分配了4k的ram空间,于是通过加大此参数,解决了程序不运行的问题,此部分属于freertos的东西,若想搞明白,还需要了解freertos的运行机制。


2、测试过程发现程序运行一定时间就会停止运行,即便将自己的task设置为最高优先级,效果也一样,于是想到了之前用不带freertos的hrs例程使用了限制广播模式,即广播一定时间之后停止广播事件,但是在freertos里面,ble的东西被放到了一个task里面,所以即便此task挂起,也不会影响其他task‘的运行,不过通过代码发现事实并非如此,因为当停止广播事件发生后,便调用了以下函数:

static void sleep_mode_enter(void)
{
    uint32_t err_code = bsp_indication_set(BSP_INDICATE_IDLE);

	NRF_LOG_INFO("sleep\r\n");
    return;
    
    APP_ERROR_CHECK(err_code);

    // Prepare wakeup buttons.
    err_code = bsp_btn_ble_sleep_mode_prepare();
    APP_ERROR_CHECK(err_code);

    // Go to system-off mode (this function will not return; wakeup will cause a reset).
    err_code = sd_power_system_off();
    APP_ERROR_CHECK(err_code);
}

此函数并非挂起task,而是Puts the chip in System OFF mode,只能通过reset才能重新运行,所以这就是freertos系统不能长时间运行的原因

你可能感兴趣的:(低功耗蓝牙)