MAX32660 MCU未输出正确的处理器时间

iszxjhcz  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(117)

我最近为max 32660 MCU购买了一个开发板。我按照该公司YouTube视频中关于如何设置它的说明进行操作,并使用Eclipse IDE获得了示例文件。我打算使用time. h库来跟踪运行代码的各个部分所需的时间。但是每当我尝试printf()任何clock_t类型的变量时,我只会得到重复的0.000000个值。
记录在案:我只是用我的Arduino串行显示器来观看从我的USB端口传来的信号。
Maxim集成youtube视频:https://www.youtube.com/watch?v=vpYBBYLkjTY&t=339s
Max 32660网页https://www.maximintegrated.com/en/products/microcontrollers/MAX32660.html
编码:

/***** Includes *****/
#include <stdio.h>
#include <stdint.h>
#include "mxc_device.h"
#include "led.h"
#include "board.h"
#include "mxc_delay.h"
#include "time.h"

/***** Definitions *****/

/***** Globals *****/

clock_t start;
clock_t end;

/***** Functions *****/

// *****************************************************************************
int main(void)
{

    printf("Hello World!\n");

    while (1) {
        start = clock();
        MXC_Delay(500000); //This part works fine
        end = clock();
        printf("%Lf\n", start); //I've tried many different versions of this
    }

}

我尝试了许多不同的printf()配置(%f、%lf、%ld、%s、%d、%i),但我无法判断变量“start”和“end”是否真的保存为该值,或者串行端口监视器阅读printf()语句时是否存在问题,尽管“Hello World!”语句打印得很好。
我希望看到返回除0.000000之外的任何数字,特别是表示时钟周期数的整数。我还希望该数字稍微低一些,因为对clock()的调用在脚本的早期。

46qrfjad

46qrfjad1#

在大多数嵌入式标准库中,time()clock()不是作为“弱链接”存根来实现的。通常您必须自己实现它们。在这种情况下,clock()CLOCKS_PER_SEC是依赖于实现的。您需要“重新定位”库,将此函数Map到您选择分配给该函数的硬件资源。在Cortex上-M4,通常是SYSTICK中断中的一个计数器,以您为平台选择的任何速率(CLOCKS_PER_SEC)递增。
您可能已经支持SYSTICK和系统时钟;在这种情况下,clock()实现可能只是现有功能外观。
即使您有一个工作的clock()代码:

printf("%Lf\n", start);

在任何情况下都不可能产生有用的结果:

  • start的类型为clock_t,它可能是long的别名,但肯定不是long double
  • 由于任何clock()实现都将与用于MXC_Delay()的任何时钟同步,因此测试只需测量自身!
  • end未使用,因此您只显示经过的时间,而不是迭代时间(这可能是有意的,在这种情况下end是多余的)。您可能有意:
printf("%ld\n", (long)(end - start) ) ;

或者可能是:

printf("%f\n", (double)(end - start) / CLOCKS_PER_SEC ) ;
  • 我会怀疑在这个目标上,long double在任何情况下都不会比double大。

相关问题