51822代码篇1

来源:互联网 发布:数据修炼系统 编辑:程序博客网 时间:2024/06/06 01:26

   之所以来细致分析51822的程序,第一个原因是因为他的历程在C语言的运用上,有很多

漂亮的地方,作为一个M0的的单片机,它没有足够的资源跑操作系统,但他的软件结构,比

我们平时遇见的一个while大循环,和几个定时器的分段要美妙许多。第二个原因是不得不承认

nordic的SDK总是把代码格式写的非常乱且没有太多解释,不做一些笔记的话很难一气呵成的

读下去。

先来看51822的main函数

int main(void)
{
    // Initialize
    leds_init();                            LED初始化
    timers_init();                        定时器初始化
    gpiote_init();                        GPIOE初始化
    buttons_init();                      按键初始化
    ble_stack_init();                  BLE协议栈初始化
    bond_manager_init();       连接管理初始化
    gap_params_init();            gap层参数初始化
    advertising_init(BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE);           广播初始化
    services_init();                     服务初始化
    conn_params_init();          连接参数初始化
    sec_params_init();            安全参数初始化
 
    // Start execution 
    advertising_start();            开始广播
    
    // Enter main loop
    for (;;)
    {
        power_manage();         待机
    }
}

我们看到,在main函数里面,先是一堆的初始化,紧接着进入了一个只有待机函数的for循环,

用户所编写的任务都放在了timer里面,按键使用gpioe 的event来唤醒芯片,这种软件结构有利于

节省功耗,用户只需要按照他程序的结构,添加任务和修改参数,就能实现自己的要求。

static void power_manage(void)

{
    uint32_t err_code = sd_app_evt_wait();  // 进去WFE 待机
    APP_ERROR_CHECK(err_code);
}

上面是  待机函数,可以看到里面除了等待event和查错,并没有执行什么。

0 0
原创粉丝点击