首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >STM32 - DWT循环计数与我的预测不同。

STM32 - DWT循环计数与我的预测不同。
EN

Stack Overflow用户
提问于 2019-08-20 11:30:44
回答 1查看 288关注 0票数 3

我用DWT->CYCCNT检查了核心周期计数。但与我的预测不同。你能告诉我原因吗?

我的设备是STM32原子核-L476RG。我只是检查一下->CYCCNT。并且只更改整数赋值次数。

代码语言:javascript
运行
复制
  m_nStart = DWT->CYCCNT;  
  m_nStop = DWT->CYCCNT;
  printf("Cycle diff - assign 0 : %lu\n", m_nStop - m_nStart);

  m_nStart = DWT->CYCCNT;  
  i = 10;
  m_nStop = DWT->CYCCNT;
  printf("Cycle diff - assign 1 : %lu\n", m_nStop - m_nStart); 

  m_nStart = DWT->CYCCNT;  
  i = 10;
  i = 20;
  m_nStop = DWT->CYCCNT;
  printf("Cycle diff - assign 2 : %lu\n", m_nStop - m_nStart); 

  m_nStart = DWT->CYCCNT;  
  i = 10;
  i = 20;
  i = 30;
  m_nStop = DWT->CYCCNT;
  printf("Cycle diff - assign 3 : %lu\n", m_nStop - m_nStart); 

  m_nStart = DWT->CYCCNT;  
  i = 10;
  i = 20;
  i = 30;
  i = 40;
  m_nStop = DWT->CYCCNT;
  printf("Cycle diff - assign 4 : %lu\n", m_nStop - m_nStart);

我期望与任务的数量成比例。但结果就是这样。

周期差异-分配0: 14

周期差异-分配1: 16

周期差异-分配2: 18

周期差异-分配3: 20

周期差异-分配4: 22

为什么结果是那样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-20 12:29:37

很难预测在ARM Cortex上执行一行C代码所需的循环次数。这取决于编译器、所设置的优化级别、声明变量的方式、缓存是否启用、代码从何处执行(RAM或Flash)等等。

您可以看到这里,它是提供的程序集。

每个分配由一个mov和一个str组成,因此有两个装配指令。但是,即使知道执行的程序集指令,也不总是允许由于流水线、缓存策略等原因而推断出精确的周期数。

最后,获得重要数字的唯一方法是测量一部分代码,就像您所做的那样。

但是,您在这里测量的代码可能没有多大意义(分配几个值,如果-except是寄存器的话,在i之间不执行任何操作)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57572653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档