历史上的今天
今天是:2025年08月19日(星期二)
2021年08月19日 | 1.13.7_前期编程_系统时间与环型缓冲区_P
2021-08-19 来源:eefocus
系统时间
首先设置一个变量记录系统时间,为了防止溢出使用的是unsigned long long的数据类型,取值范围是0~2^64,计算得到,需要运行50几亿年才会溢出。


在定时器中断中累加这个值,可以通过get_system_time_us函数获取系统时间。

每来一个时钟脉冲(0.2us一个时钟脉冲)计数器减1,再和系统时间变量结合就可以得到us级的系统时间了。

环型缓冲区
假设有一个char类型的数组,最多保存6个char数据,设置一个读变量r,它表示下一个读元素的下标,设置一个写变量w,它表示下一个写元素的下标,它们的初始值都为0。
那么写数据就是:
buf[w] = val;
w = (w + 1) % len; /* len为数组长度 */
读数据就是:
val = buf[r];
r = (r + 1) % len;
当数组为空时,r == w;
当数组满时,我们使用(w + 1) % len == r来判断;
这是因为如果先将数据放进入,那么满数据时放入数据后,会出现r == w的情况,这与空判断重合了,所以我们在写的下标+1来判断,如果数据没满,那么+1也不会出现r == w。

顾名思义,环形缓冲区就是一个首位连接在一起的数组,读写到了数组的末尾时又会从数组的开头重复操作。
史海拾趣
|
目前对于UPS、EPS、逆变电源等的大功率产品,开发设计者设计的蓄电池逆变电压往往很高。面对由很多蓄电池串联而成的高电压蓄电池组,设计者对蓄电池组的充电往往以市电经过变压器升压后整流或市电整流后经高频电子BOOST升压的传统方式来实现。前者 ...… 查看全部问答> |
|
【讨论】“嵌入式裸奔”、“嵌入式OS”、“OS”各适合什么场合? 如果你只能用的心: A)如果你手上是4位MCU? B)如果你手上是8位MCU? C)如果你手上是16位MCU? D)如果你手上是外设不多的32位MCU? E)如果你手上是外设丰富的32位MCU? F)如果你手上是外设极其丰富的64位MCU? 你要做什么产品: a)如果你 ...… 查看全部问答> |
|
某PCI设备在已有相应驱动程序的情况下,要添加另一驱动,两驱动并行工作,可以实现吗? 我有一块PCI接口的DSP开发板。PCI接口芯片是AMCC S5933。该PCI板卡已安装了相应的驱动。 我想读写AMCC S5933的配置寄存器和操作寄存器,实现主模式传输。想用Windriver写个简单的驱动程序,并写相应的应用程序,实现配置功能。但是,原来已安装的 ...… 查看全部问答> |
|
遇到一些问题。希望各位不吝赐教。先谢过了。 现在有两个界面,称为A和B吧。 通过网口传输数据。在A界面接收数据,然后在B界面通过一个ListCtrl显示 ListCtrl控件选择为report 每接收一个数据就在list中显示一个。 现在的问题是。如果在A界面 ...… 查看全部问答> |
|
一个人研究的郁闷,过来找大家问问BITMAP_HEADER_SIZE 这个宏定义的是什么?RIT128x96x4ImageDraw()这个函数有人看过吗… 查看全部问答> |




