CSR uEnergy例子讲解之timer用法

CSR1010蓝牙开发探索(一) 花了多少时间我已经不想提起,但是至少还是有点成果的,分析了不少代码,也看了不少资料,发现比较接地气的东西还是比较少,不多花点时间积累,说实话很辛苦。 现在还没有足够的水平上升到蓝牙协议的层次,饭要一口一口吃,不然就消化不良了不是?所以还是慢慢来,记录一下探索蓝牙协议的过程,希望对像我一样白的新手会有帮助。 准备的开发板是keyfob,蓝牙芯片CSR1010,开发环境是CSR uEnergy S 阅读详情

定时器在所有的MCU中都扮演着十分重要的角色,在CSR101x系列SOC中也不例外,下面我就以SDK中的例子来简单说明timer在CSR101x开发中的用法。

首先打开我们要的工程:

整个工程就一个文件—main.c,打开该文件,首先我们会看到三个宏定义:

 

第一个是MAX_TIMERS,它定义了整个程序同时所用到的timer数量,这里我们只用到了一个,所以只定义了1.

TIMER_TIMEROUT1和TIMER_TIMEOUT2分别定义了timer溢出的时间。

接下去定义的是定时器的缓存:


 


 

以上这些定义都会在下面的代码中用到。

接下去直接切入主题,看到初始化函数:

void AppInit(sleep_statelast_sleep_state)

{

    //初始化Debug串口

    DebugInit(1, NULL, NULL);

    //发送Debug字符串

    DebugWriteString("\r\nInitialisingtimers");

    //初始化timer,这里用到了前面的定义,timer的初始化就是这么简单,但是这步是必须的

    TimerInit(MAX_TIMERS, (void *)app_timers);

    //向串口打印当前系统time信息

    printCurrentTime();

    //开启第一个定时器

    startTimer(TIMER_TIMEOUT1, timerCallback1);

}

下面我们来看一下开启定时器函数startTimer是怎么写的:

static void startTimer(uint32timeout, timer_callback_arg handler)

{

    //开启timer定时器,TimerCreate函数需要输入timer溢出时间和回调函数两个参数,中间的参数一般就设置为TRUE好了,然后如果timer开启成功,会返回一个timer_id值,这个值建议存在一个变量中。

    const timer_id tId = TimerCreate(timeout,TRUE, handler);

    //如果timer创建失败,则向系统报错

    if (tId == TIMER_INVALID)

    {

        DebugWriteString("\r\nFailed tostart timer");

        /* Panic with panic code 0xfe */

        Panic(0xfe);

    }

}

前面我们提到过TIMER_TIMEOUT1定义的时间为1s,如果程序运行正常,1s后会自动运行timerCallback1函数,下面我们再看看timerCallback1中发生了什么:

static voidtimerCallback1(timer_id const id)

{

    ……

    //上面上面省略的代码不做过多解释,反正就是根据一些条件往串口打印一些数据

    //这里重新开启另一个timer,当时间溢出后调用timerCallback2回调函数

    startTimer((TIMER_TIMEOUT2 -TIMER_TIMEOUT1), timerCallback2);

}

同样,我们来看timerCallback2函数:

static voidtimerCallback2(timer_id const id)

{

    …

          //这里timer2结束后重新开启一个timer1

    startTimer(TIMER_TIMEOUT1, timerCallback1);

}

就这样,整个程序就是执行完timerCallback1后执行timerCallback2,执行完timerCallback2后继续执行timerCallback1,如此周而复始。。。

由以上例子可以看出,timerCallback函数只会在timer溢出时执行一次,如果要让他继续执行,则必须要在函数结束前再重新开启一遍timer。

当然,我们还可以在timerCallback函数执行前销毁timer,这样timerCallback函数就不会被执行,销毁timer可以调用TimerDelete(timer_id),这里需要用到创建timer时候返回的timer_id号,如果创建的时候未保存,那就不能delete了啦。此函数在本例子中没有说明,具体使用方法在API中有详细说明。

这里强调一点,在这样的简单程序中,以上写法没啥大问题,因为你能清楚地掌控所有timer,但是如果是一个复杂程序,这样写显得不严谨,容易给你的debug造成很大困扰,因为你根本不知道何时程序会开启一个timer,何时程序会去销毁一个timer,所以,当我们在开启timer的时候必须要将timerId保存到一个变量中,当销毁一个timer的时候要将次变量中的timerId清除,当执行一个timerCallback函数的时候,要判断timerId是否相符。。。在使用timer的时候必须保持良好的习惯,这样程序才不容易出错。当然,如果你有十足把握掌控所有timer,那可以忽略这点。


转自:http://sanwen8.cn/p/1f9CFqR.html

CSR蓝牙遥控器OTA固件升级 目录   概述... 2 OTA升级过程简介... 2 日志... 2 img文件格式... 3 各个img文件的关系... 4 OTA EEPROM Memory Map. 4 CSR OTA Update bootloader shared data. 5 Application NVM.. 5 触摸屏固件升级... 6 替换触摸屏固件... 6 小 阅读详情

相关推荐

Timer(计时器)简介

Timer是SoC设计中不可或缺的组件,它为系统提供了精确的时间管理和基于时间的控制功能。通过灵活的配置和多模式操作,Timer能够适应各种应用场景,从简单的时间测量到复杂的实时控制系统。随着技术的发展,Timer的功能也在不断扩展,以满足日益增长的系统性能和效率要求。

ygyglg的专栏 3333

CSR uEnergy例子讲解之PIO操作

uEnergy安装完毕后,会在安装目录下看到apps文件夹,里面有很多的例子,从这一节开始我将会挑选部分例子进行讲解,掌握这些例子后,会对CSR uEnergy的开发有一个大致的了解。 今天我们以示例代码中的PIO为例,讲解PIO的一些用法。   首先,打开SDK的安装目录,找到PIO文件夹: 打开后,双击pio.xiw打开: 打开后会有以下界面:

ccccce的博客 2049

十、RISC-V SoC外设——timer定时器 代码讲解

上一篇博文中注释了SPI外设模块,现在来介绍timer定时器模块。 目录 1. 结构 2. timer模块 2.1 输入和输出端口 2.2程序注解 3.总结 参考: 1. 结构 如下图,TIMER模块也是通过总线与内核进行交互的。该模块的主要功能是通过计数器达到计数阈值,来触发定时器中断。 2. timer模块 2.1 输入和输出端口 inputwireclk, inputwirerst, //内核给外设 inputwir...

weixin_42294124的博客 6504

CSR_uEnergy_SDK-2.4.2.1 e2cmd

c:/CSR_uEnergy_SDK-2.4.2.1/tools/bin/e2cmd.exe, version 2.4.2.149 Release Copyright Cambridge Silicon Radio Limited 2007 - 2014. =================================================================

自由软件的天堂 1897

SOC子模块--Timer

timer 基础入门

创芯人--fly的博客 498

CSR uEnergy 开发环境的操作使用手册

CSR公司提供,支持蓝牙芯片CSR1000,CSR1001 开发集成环境的(SDK)的操作手册(uEnergy XIDE UserGuide)  详细描述如何创建工程,如何COMPILE,及DEBUG等方法,图文并茂。

CSR_uEnergy_SDK-2.5.1.z01 2/2-1

CSR uEnergy SDK2.5.1

CSR_uEnergy_SDK-2.5.1 1/2

CSR uEnergy SDK 2.5.1

CSR uEnergyToolsCSR开发工具3(3-3)

CSR uEnergyToolsCSR开发工具3

CSR_uEnergy_SDK-2.6.1.7

CSR_uEnergy_SDK-2.6.1.7 CSR蓝牙开发工具。

CSR uEnergy 4.1 最新开发环境的操作使用手册

CSR公司提供 支持蓝牙芯片CSR1000 CSR1001 开发集成环境的 SDK 的操作手册最新版本4 1(uEnergy XIDE UserGuide)  详细描述如何创建工程 如何COMPILE 及DEBUG等方法 图文并茂

uEnergyTools_2_5_0_1

蓝牙烧录工具,CSR1010烧录工,蓝牙烧录工具,CSR1010烧录工

CSR_uEnergy_SDK 2.6.1.7蓝牙开发工具.rar

软件介绍: CSR_uEnergy_SDK V2.6.1.7最新版本是一款CSR蓝牙开发集成环境的开发工具,这个是它的安装包.安装包含以下几个套件:CSR uEnergy Over-the-Air Updater 2.6.0.3CSR uEnergy KES Pairing Demonstrator 2.6.0.1CSR uEnergy KES Demonstrator 2.6.0.1CSR uEnergy Profile Demonstrator 2.6.0.3

CSR_uEnergy_SDK-2.4.5.13

CSR_uEnergy_SDK-2.4.5.13 CSR 蓝牙开发工具。

CSR_uEnergy_SDK-2.6.0.10和InstalluEnergyTools_2_5_0_108及对应文档

CSR_uEnergy_SDK-2.6.0.10和InstalluEnergyTools_2_5_0_108及对应文档,亲测有效

CSR_uEnergy_SDK-2.4.3.26.part1

官方最新SDK开发方,要开发 CSR BT 所需要的工具 分为2个档案,2个都要下才可以解压

timer/counter在SOC中的作用

对timer/counter在SOC中的作用进行概括

weixin_41155581的博客 1725

Flowable任务节点动态预测:基于任务ID与参数获取下一节点及候选分配策略

本文深入探讨了Flowable工作流引擎中任务节点动态预测功能的实现。通过解析任务ID与运行时参数,模拟流程执行路径,精准预测下一节点及候选用户/组集合,从而提升用户体验与系统透明度。核心在于利用自定义命令实现表达式求值,并深度解析候选者分配策略,确保预测结果与实际流程执行一致。

nnn11的博客 741
上一篇: fedora9安装中文输入法并调试
下一篇: CSR uEnergy例子讲解之PIO操作
ccccce
博客等级 码龄15年 93粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值