帮忙看看这个软件定时的问题

2019-07-16 03:51发布

本帖最后由 urcllr 于 2012-11-12 16:25 编辑

今天用UVersion4写了个软件定时程序,用的循环变量是unsigned int型,但发现一个奇怪的问题,当循环数设为32767和32768,它们的执行时间相差很离谱。这个刚好又是signed int的上界,但我试过改成unsigned char型,循环数设为127和128,执行时间基本一致。我试过在程序中加过long型变量记数器,确定它们执行的次数是正确的,32767就执行32767次,32768就执行32768次,就是时间不一致。

我试过调整优化级别,从0级常量折叠到8级重用代码入口都试过了,现象都一样,并且在UV4环境下仿真和真机(SST、STC芯片)执行都出现这种情况。

这现象仅从C代码来看是不可理喻的,小弟我对汇编又不太了解,看着UV4的编译代码也不知问题所在,还望各位前辈高手帮忙看看,编译器到底对这两种循环做了什么不同的处理。谢谢~~

以下是我用的UV版本信息:
IDE-Version:
μVision V4.53.0.6
Copyright (C) 2012 ARM Ltd and ARM Germany GmbH. All rights reserved.

License Information:
省略

Tool Version Numbers:
Toolchain:        PK51 Prof. Developers Kit  Version: 9.50a
Toolchain Path:    C:KeilC51BIN
C Compiler:         C51.Exe       V9.50a
Assembler:          A51.Exe       V8.02b
Linker/Locator:     BL51.Exe       V6.22
Librarian:             LIB51.Exe       V4.29
Hex Converter:      OH51.Exe       V2.6
CPU DLL:               S8051.DLL       V3.84.0.1
Dialog DLL:         DP51.DLL       V2.62.0.1
Target DLL:             MON51.DLL       V2.45
Dialog DLL:         TP51.DLL       V2.58


下面是代码和UV中仿真的时序图

代码和UV4仿真的时序图 代码和UV4仿真的时序图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。