永发信息网

汇编语言运行时间问题(MSP430)

答案:2  悬赏:0  手机版
解决时间 2021-02-11 21:54
  • 提问者网友:自食苦果
  • 2021-02-11 02:44
硬件环境:MSP430
软件环境:IAR
最近在用MSP430测试汇编运行时间的时候发现了问题:
程序段一:
Mainloop xor.b #002h,&P5OUT ; Toggle P5.1
jmp Mainloop ; Again
程序段二:
mov.b #002h,R15 ;
Mainloop xor.b R15,&P5OUT ; Toggle P5.1
jmp Mainloop ; Again

两端程序的P5.1口测频率结果是 12cycles,但是手册上说Rn 至 &EDE要4个cycles而#N 至 &EDE要5个cycles,jump要用2个cycles,那么,程序段一:(4+2)*2 = 12,程序段二: (5+1)*2 = 14.

请高手不吝赐教,谢谢。

MSP430汇编语言中不同操作指令,相同类型的地址模式,指令运行的时间都一样吗?
另外,在IAR中,软件仿真中如何得到精确的指令时间计算?
利尔达的说明和官方的说明都很少有介绍这个方面的内容,我怀疑是IAR进行了优化,但是不知道在哪里更改?
最佳答案
  • 五星知识达人网友:廢物販賣機
  • 2021-02-11 04:10
指令运行的时间不一样

精准定时CPU_F是晶振频率
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) //x us
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) /// x ms
全部回答
  • 1楼网友:鸽屿
  • 2021-02-11 05:44
#pragma vector是固定在程序中的格式,后面接的是中端向量地址wdt_vector 这使开门狗中端,如果是定时器a/b中端那向量就是timera1_vector (timerb1_vector ) 如果是a/d转换完成中端sd16_vector如果是端口一中端那向量就是port1_vector。 __interrupt void watchdog_timer(void) 这句话除了watchdog_timer是自己定义的函数名外(自己定义的)其他是固定的(当然void参数可以是int或者其他的double等等)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯