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系统不能长时间运行的原因
’