c语言执行一步需要多久?

[复制链接]
9195|50
谈的元 发表于 2011-11-18 22:05 | 显示全部楼层
以PIC16F887为例子:4MHZ晶体,普通指令为1US,跳转指令为2US;

C写的 i++;执行就需要2US;(因为有2条指令)

                           i++;
  01F7    1683     BSF 0x3, 0x5
  01F8    0AA0     INCF 0x20, F
chenbb8 发表于 2011-11-18 23:13 | 显示全部楼层
我在AVRGCC下编译,发现-1选项的时候,i++用的不是自增指令,而是寄存器里的数值+1:(
584740801 发表于 2011-11-19 07:58 | 显示全部楼层
看书吧  书上有
584740801 发表于 2011-11-19 07:58 | 显示全部楼层
初学者可以去学郭天翔的十天学会单片机
刘君成 发表于 2011-11-19 08:02 | 显示全部楼层
11# zhl100  
如果在一段程序中有多处延时,不可能每次都进入中断吧?我这样说对吗?
mhl331302671 发表于 2011-11-18 14:42


难道你程序中多处延时,都用delay吗?
那芯片还能干其他活吗?
我的感觉,如果延时长度大于微秒级,还是用中断来做吧.
还有要处理好程序的结构,一般不会用到多处延时的.
micheal0311 发表于 2011-11-19 08:16 | 显示全部楼层
想知道准确时间,用示波器观看IO口置高置低即可。
谈的元 发表于 2011-11-19 08:52 | 显示全部楼层
5个US内延时用DELAY()是比较好的
zhl100 发表于 2011-11-19 09:19 | 显示全部楼层
看21楼的例子,硬件仿真时候c语句对应汇编或是打开编译生成的lst,里面对应汇编代码
对应语句,对应不同的时间
加起来就行了
不过别在中断里这么延时太久:lol
fjzzclc 发表于 2011-11-19 09:38 | 显示全部楼层
12M. 应是1微秒吧
linfuchi 发表于 2011-11-19 11:22 | 显示全部楼层
看看C语言编译出来的汇编指令了,然后看指令的周期了,然后加起来。
如果仅仅从C语言来看,你的问题无法回答。因为一条或一段C语言对应的汇编指令是跟编译器及编译器优化选项相关的!
cumt2012 发表于 2011-11-19 11:44 | 显示全部楼层
29# fjzzclc
这是怎么算的:L
gdutxzy 发表于 2011-11-19 12:19 | 显示全部楼层
可以用DEBUG 跟踪时间,就知道精确的运行时间了。
要不反汇编,自己慢慢算吧。
yanshanbao 发表于 2011-11-19 14:00 | 显示全部楼层
一般的用软件仿真就行。
xuxuweifeng 发表于 2011-11-21 15:15 | 显示全部楼层
这个问题问的 有点懵
zhbsniper 发表于 2011-11-21 15:52 | 显示全部楼层
你可以看一下C汇编后的代码,根据一条指令的需要的周期,计算时间
fjzzclc 发表于 2011-11-22 13:29 | 显示全部楼层
汇编的话1US是没错,但C我想也差不多吧
ddddkk 发表于 2011-11-22 16:00 | 显示全部楼层
LZ这样问问题,我傻眼了
兰天白云 发表于 2011-11-18 14:46


哈哈
tianyalingyin 发表于 2011-11-22 21:28 | 显示全部楼层
不同的单片机的指令周期是不一样的,楼主请说明你使用的是什么单片机啊
tianyalingyin 发表于 2011-11-22 21:28 | 显示全部楼层
不同的单片机的指令周期是不一样的,楼主请说明你使用的是什么单片机啊
tianyalingyin 发表于 2011-11-22 21:29 | 显示全部楼层
不同的单片机的指令周期是不一样的,楼主请说明你使用的是什么单片机啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部