基于ARM内核目标系统中的代码运行时间测试

发布者:清新天空最新更新时间:2012-11-22 来源: 21ic 关键字:ARM内核  目标系统  代码运行 手机看文章 扫描二维码
随时随地手机看文章
  在ARM系统中,有时需要精确的时间测量。通常,取时间的C函数(如gettime()等)不仅通用性差(必须包含头文件DOS.H,且不支持Unix、Linux和标准C),明显不适用于ARM系统[1];更成问题的是,其最短时间只能到10-2 秒级,不能提供更短的时间分度。根本原因在于: 这类函数是基于系统实时时钟(RTC)的,而RTC通常采用标准化钟表晶振,频率只有32.768 kHz而已。

  然而很多应用涉及μs级的时间计量,这是标准化了的RTC以及基于它的时间函数所无能为力的。笔者在移植DES算法到ARM系统的实验过程中,便遇到过要定量评估加密算法耗时多少的问题,发现的确不能用上述常规的C函数解决。经对ARM芯片结构的考察,发现其内置的WatchDog系统是以系统时钟驱动的,定量性能应该很好,区分时间间隔的精细程度也应该足够。于是根据所用ARM芯片的原厂家数据手册中的说明,借用 WatchDog编写了自己的计时函数,使用起来也比较方便。考虑到ARM芯片都带有内置看门狗,笔者觉得这种方法可算是一个不错的“过渡性”解决方案,故在此加以介绍,供同行们参考并指正。

  1、测量原理

  ARM芯片中的看门狗,其原始功能是监视CPU核心运行的某些超时。这些超时的发生,通常是因为干扰和系统错误等造成的程序运行混乱。一旦发生这类情形,看门狗便请求中断服务或发出复位脉冲重启系统。为了达到这样的目的,其计时原理必须独立于系统中的任何进程。实际上,WatchDog是独立的硬件逻辑,其计时脉冲直接取自系统主时钟,因此它与RTC一样具备实时性和独立性,借用看门狗的计时体系来实现高精度时间测量是合理的。

  先以实验中用到的S3C44B0X为例(该实验所用的ARM开发板型号为NETARM300),具体谈谈看门狗的工作原理。

  系统主时钟MCLK经过可编程预分频、可选固定分频后,进入WTCNT(硬件系统的计时计数器,16位)计数。根据器件手册,计数时间间隔t_watchdog=1/(MCLK/(Prescaler value+1)/Division_factor )。式中,参数Prescaler value的取值为0~28-1;Division_factor有16、32、64、128四种取值。如果复位信号输出允许(即WTCON的位0置1),那么一旦计数器WTCNT的计数超过WTDAT允许的范围,看门狗就会将CPU复位。本实验过程中屏蔽掉了这种复位和中断请求功能,仅让它对脉冲计数。

  控制寄存器WTCON的有关各位定义图中已给出(如需详细解释可查阅器件手册,如参考文献[3]),其他全为保留位,可全置为0。

  至于MCLK具体值的计算,可以查验系统中的晶振参数(频率),读取系统时钟的PLL寄存器(如S3C44B0X的PLLCON)后算得。计算的方法都已在具体ARM芯片手册中给出。

  2、测量算法实现和实验结果

  按照所需参数设置的看门狗定时器控制寄存器WTCON的值(如前所述),在待测代码段执行之前开启看门狗定时器;等其执行完毕则关闭看门狗定时器,读取WTCNT的值即可算得运行时间。作为一个具体示例,笔者实验中所实现的算法如下:

  (1) 计时算法

  void my_CountStart() {

  rWTCON=((MCLK/1000000-1)<<8)|(2<<3);   //1 MHz/64,Watchdog,nRESET,中断禁止

  rWTDAT=0xffff;

  rWTCNT=0xffff;

  rWTCON=((MCLK/1000000-1)<<8)|(2<<3)|(1<<5);   //计时开始

  }[page]

  int my_CountStop() {

  int i=0;

  rWTCON=((MCLK/1000000-1)<<8)|(2<<3);   //计时结束

  i=0xffff-rWTCNT;//每16 μs计数一次

  return i*16;

  }

  (2) 应用

  int Main() {

  my_CountStart();

  Des_Go(buf, buf, sizeof(str), key, sizeof(key), ENCRYPT, Is3DES);

  encrypt_time=my_CountStop();

  }

  需要指出: 在改变WTCON的值之前应将原有值保存,待测量完成后再复原WTCON。之所以强调这一点,是因为系统别处很可能在使用看门狗功能。

  实验当中,对长度为189字节的字符串采用3次DES加密。密钥长度为15位,测得的加密时间为28 832 μs,解密时间为28 896 μs。缩短字符串长度,测得的加密时间基本呈线性变化: 字符串长度为107字节而其他地方不变时,加密耗时16 928 μs,解密耗时16 948 μs;字符串长度为41字节而其他地方不变时,加密耗时7 424 μs,解密耗时7 424 μs。对于相同长度的字符串,密钥长度的改变对加密/解密时间的影响不是很大。

  值得一提的是,刚开始实验时,被加密字符串分别取为190字节和75字节,测得耗时分别是34 032 μs和16 928 μs,显然与倍增的关系相差很远。分析程序后发现,原来问题出在加密算法中间的打印语句“Uart_Printf(" counting begin...!!!")”上。原来以为它耗时很少,故没有将它从加密算法中移走;移走后再试,耗时大减,分别为29 600 μs和12 496 μs,与字符数倍增、时间倍增的预期基本相符。上面的实验,还使笔者得知该打印语句占用了4 432 μs。稍微修改条件,继续实验: 当上述打印语句的字节数扩充为原来的4倍时,测得该语句耗时17 728 μs。可见,耗时与打印内容的字节数基本上成正比;另外,这种打印语句与加密/解密算法本身相比,并不是想当然地只占用一点点时间。(上述数据与PC机串口通信波特率的设置无明显关系。实际测试结果为: 波特率由115 200 bps下降到57 600 bps,没有可以察觉到的差别。)

  3、测量方法讨论

  ARM内置看门狗用作时间度量的适用范围,大体以μs数量级为界。比如,从S3C44B0X的器件特性说明中可知,MCLK在看门狗计时器里的分频比至少是1/16。典型情况下,MCLK=60 MHz,则看门狗能够分辨的最短时间单元t=1/(60 MHz/16)=0.27 μs。统计误差约为t/2,即0.1μs数量级。就μs级的时间测量精度而言,相对误差有可能达到1%~10%;不过,这对很多速度估算的场合来说还是可以接受的。如果被测时间在10 μs以上,那就没有任何问题,可以认为是相当精确的了。

  这种思路还可用来实现精确延时,因为它的定时不依赖于指令执行时间(指令执行要受到系统调度等的影响,因而有很多不确定因素),而取决于对主时钟的硬件分频计数。

  由此实验推广,ARM内置看门狗可以作为此类系统中的第二时钟存在。对于那些时间要求精确到μs、RTC的精度无法满足的应用,这种处理都不失为一种准确、高效的方法。

参考文献:

[1]. S3C44B0X datasheet http://www.dzsc.com/datasheet/S3C44B0X_589522.html.
[2]. 1/16 datasheet http://www.dzsc.com/datasheet/1%2f16_2510134.html.

关键字:ARM内核  目标系统  代码运行 引用地址:基于ARM内核目标系统中的代码运行时间测试

上一篇:用NFS服务开发ARM Linux程序的一些方法
下一篇:ARM视频监控平台

推荐阅读最新更新时间:2024-03-16 13:13

ARM 内核移植中常见的错误
1.下载linux-2.6.36.1.tar.bz2 问题:tar -zxvf 解压压缩文件出现问题,无法识别. 解决:1.通过file linux-2.6.36.1.tar.bz2 查看压缩格式 2.通过命令 bzip2 -d linux-2.6.36.1.tar.bz2解压 3.再通过tar xvf linux-2.6.36.1.tar解压,不能使用 tar zxvf linux-2.6.22.6.tar解压 4.上面也可以通过一条指令bzip2 -dc linux-2.6.XX.tar.bz2 | tar xvf - 其中XX为内核压缩包文件名 2.下载p
[单片机]
Mentor Tessent Safety 生态系统助力Ambarella 的 AI 视觉处理器实现汽车安全目标
AI 视觉芯片公司使用 Tessent 测试技术成功实现bring-up并达到ISO26262 安全目标 Mentor, a Siemens business 近日宣布,其 Tessent™ 软件安全生态系统帮助人工智能 (AI) 视觉芯片公司 Ambarella达成系统内 (in-system) 测试要求,并为该公司的 CV22FS 和 CV2FS 车载相机片上系统 (SoC) 实现 ISO26262 汽车安全完整性等级 (ASIL) 目标。 “可测试性设计 (DFT) 是集成电路 (IC) 设计的关键要素,对面向安全关键型汽车应用的尖端 AI 设备来说更是如此,”Ambarella VLSI 总监 Praveen J
[汽车电子]
Mentor Tessent Safety 生态<font color='red'>系统</font>助力Ambarella 的 AI 视觉处理器实现汽车安全<font color='red'>目标</font>
获取单片机代码运行时间的方法
  单片机编程者需要知道自己的程序需要花费多长时间、while周期是多少、delay延时是否真如函数功能描述那样精确延时。很多时候,我们想知道这些参数,但是由于懒惰或者没有简单的办法,将这件事推到“明天”。笔者提出了一种简便的测试方法,可以解决这些问题。   测试代码的运行时间的思路: 使用单片机内部定时器,在待测程序段的开始启动定时器,在待测程序段的结尾关闭定时器。为了测量的准确性,要进行多次测量,并进行平均取值。 借助示波器的方法是:在待测程序段的开始阶段使单片机的一个GPIO输出高电平,在待测程序段的结尾阶段再令这个GPIO输出低电平。用示波器通过检查高电平的时间长度,就知道了这段代码的运行时间。显然,借助于示波器的方法
[单片机]
获取单片机<font color='red'>代码</font><font color='red'>运行</font>时间的方法
汽车信息系统:缘何成为攻击新目标
    近年来,包括导入各式各样的软件在内,信息技术在汽车上的运用越来越广泛。有些汽车配备的电子控制单元(ECU:Electronic Control Unit)甚至多达100个以上,程序代码据说多达约1000万行,汽车已经变成了配备大量软件的系统。   变成软件集合体的汽车,如今正面临着新的威胁(图1)。2010年,美国的研究人员发现,经由汽车内外的通信渠道可以攻击车载软件的漏洞,从而影响车辆的控制系统。这表明,虽然注重实时性的车载系统与信息系统存在不同,但在认证、通信保密等方面,车载软件存在信息安全上的弱点。   而且,今后车载软件系统受到攻击的可能性还会上升。这是因为攻击的途径正在增加。车辆外部接口的种类越来越多,除了故障诊
[汽车电子]
ARM筆記:Linux内核移植到JZ2440
一、准备工作: 1、Linux内核:Linux2.6.22.6,可从 www.kernel.org 上下载; 2、交叉工具编译链:arm-linux-gcc-3.4.5-glibc-2.3.6; 3、yaffs2文件代码; 4、ubuntu9.10; 5、JZ2440; 二、内核移植: 1、修改Makefile: 修改内核源码根目录下的Makefile文件 #ARCH ?= arm #CROSS_COMPILE ?=arm-linux- 2、修改晶振 修改arch/arm/mach-s3c2440/mach-smdk2440.c static void __init smdk2440_map_io(void) {
[单片机]
痞子衡嵌入式:ARM Cortex-M内核那些事(3)- 功能模块
  ARM Cortex-M处理器家族发展至今(2016),已有5代产品,分别是CM0/CM0+、CM1、CM3、CM4、CM7。 1.Cortex-M兼容特性   为了能做到Cortex-M软件重用,ARM公司在设计Cortex-M处理器时为其赋予了处理器向下兼容、软件二进制向上兼容特性。   首先看什么是二进制兼容,这个特性主要是针对软件而言,这里指的是当某软件(程序)依赖的头文件或库文件分别升级时,软件功能不受影响。要做到二进制兼容,被软件所依赖的头文件或库文件升级时必须是二进制兼容的。   那么什么又是向上兼容,向上兼容又叫向前兼容,指的是在较低版本处理器上编译的软件可以在较高版本处理器上执行。   跟向上兼容
[单片机]
痞子衡嵌入式:<font color='red'>ARM</font> Cortex-M<font color='red'>内核</font>那些事(3)- 功能模块
风河与飞思卡尔共同展示基于MPC8572的多处理解决方案
日前,风河系统公司(Wind River)与飞思卡尔半导体(Freescale)在由Power.org主办的2007 Power Architecture开发者大会上共同展示了基于飞思卡尔 MPC8572双核处理器的端到端多内核优化解决方案。风河公司采用其业界领先的VxWorks实时操作系统(RTOS)实现该优化解决方案,特别提供了对对称多处理结构(SMP)的支持。在本次大会上,这一全新的解决方案将在风河和飞思卡尔展台进行现场演示,这也是业界首次通过MPC8572 处理器实现SMP软件的运行和测试。 来自风河和飞思卡尔的多核解决方案将有效地消除在多核系统架构下软件解决方案开发的各种复杂性,并且更充分地发挥多核硬件系统组件所具有的性
[焦点新闻]
基于VxWorks目标跟踪系统的接口板设计
1 前言    由于目前发展现代化的坦克火控系统已成为充分发挥坦克火力,提高战场生存能力的最有效途径之一。随着嵌入式系统的发展,VxWorks操作系统以其良好的有效性、可裁减性、互操作性、可靠性和卓越的实时性等优点被广泛地应用在高精尖技术及实时性要求极高的领域中。因此基于VxWorks嵌入式操作系统的目标自动跟踪技术的研究已经成为提高坦克火控系统性能研究的主要方向。本文以研制坦克目标自动跟踪系统信息处理平台为背景,设计了基于 VxWorks的目标自动跟踪系统的 PCI总线接口板,实现了坦克火控计算机与坦克火控系统之间的数据通信。其中以桥接芯片 PCI9054 为核心的设计尤为重要。使目标自动跟踪系统具备了能够捕获和跟踪较复杂
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved