我最近为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()的调用在脚本的早期。
1条答案
按热度按时间46qrfjad1#
在大多数嵌入式标准库中,
time()
和clock()
不是作为“弱链接”存根来实现的。通常您必须自己实现它们。在这种情况下,clock()
和CLOCKS_PER_SEC
是依赖于实现的。您需要“重新定位”库,将此函数Map到您选择分配给该函数的硬件资源。在Cortex上-M4,通常是SYSTICK中断中的一个计数器,以您为平台选择的任何速率(CLOCKS_PER_SEC
)递增。您可能已经支持SYSTICK和系统时钟;在这种情况下,
clock()
实现可能只是现有功能外观。即使您有一个工作的
clock()
代码:在任何情况下都不可能产生有用的结果:
start
的类型为clock_t
,它可能是long
的别名,但肯定不是long double
。clock()
实现都将与用于MXC_Delay()
的任何时钟同步,因此测试只需测量自身!end
未使用,因此您只显示经过的时间,而不是迭代时间(这可能是有意的,在这种情况下end
是多余的)。您可能有意:或者可能是:
long double
在任何情况下都不会比double
大。