5958|5

3

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

TMS320F2812 DSP中while和do……while有何区别? [复制链接]

在基于TMS320F2812 DSP的软件开发过程中,遇到下面问题,至今未找到原因。

开发环境介绍:TI公司提供的 CCS2.21+TMS320F2812系统板+USB2.0仿真器

程序的基本思路:采用EV定时器中断,每隔10ms产生一次中断,在中断服务子程序中设定的记数寄存器T10mscount每次增1,主程序根据这个记数寄存器的值来定时。
初始化程序在此不贴出,只贴出测试程序部分。
for(;;)
{
      GpioDataRegs.GPATOGGLE.bit.GPIOA6 = 1;//测试引脚翻转
     T10mscount = 0;
     do
     {
     }
     while (T10mscount < 20);//20*10ms=200ms
}
有上面的程序可以看出,其功能是没隔200ms的时间把GPIOA6引脚的电平翻转一次,以方便用示波器观察GPIOA6引脚的电平。经测试上面程序符合要求,但用while语句怎么不行呢,不知道CCS2.21里面的c编译器和标准编译器有什么差别。
把程序改为如下:
for(;;)
{
     GpioDataRegs.GPATOGGLE.bit.GPIOA6 = 1;//测试引脚翻转
      T10mscount = 0;
     while (T10mscount < 20)//20*10ms=200ms
     {
     }
}
程序输出结果不正确,经测试发现是程序始终在while语句中循环,好像判断语句始终为真,不知道原因为何?改为上面的do...while语句则正常。

另外还有一点,在while{}语句最后加“;”号竟然也能编译通过。

没办法,看来只好观察编译后的汇编语言了,对照一下,看看这两种循环结构到底有什么差别。

第一种结构的汇编语言如下:
   3F8182  1A23 OR   @35,#0X0040
   3F8184  761F MOVW DP,#FE43
     3F8186  2B01 MOV  @1,#0
   GpioDataRegs.GPATOGGLE.bit.GPIOA6 = 1;//测试引脚翻转      
      T10mscount = 0;
     do
     {
     }
     3F8187  9201 MOV  AL,@1
     3F8188  520A CMPB AL,#10
     3F8189  67C4 SB   L3,HIS
     while (T10mscount < 20);//20*10ms=200ms
     3F818A  520A CMPB AL,#10
     3F818B  68FF SB   L6,L0


第二种结构的汇编语言为:
      GpioDataRegs.GPATOGGLE.bit.GPIOA6 = 1;//测试引脚翻转
      3F8182  1A23 OR   @35,#0X0040
      T10mscount = 0;
     3F8184  761F MOVW DP,#FE43
     3F8186  2B01 MOV  @1,#0
     while (T10mscount < 20)//20*10ms=200ms
     3F8187  9201 MOV  AL,@1
     3F8188  520A CMPB AL,#10
     3F8189  67C4 SB   L3,HIS
     {
     }
     3F818A  520A CMPB AL,#10
     3F818B  68FF SB   L6,L0

最新回复

C语言慢慢学习  详情 回复 发表于 2012-6-20 07:54
 
点赞 关注

回复
举报

2498

帖子

0

TA的资源

至上芯片

沙发
 
不知道你学习c语言没有?道理是一样的,看了你的帖子
while 是先判断后执行!
do-while 是先执行在判断
也就是说while最少执行零次
do-while至少一次
其他的两者没有区别
关于你说的直接加分号可以通过
这个其实c语言把它当成一条空语句 ,什么也不干的,就相当于汇编里面的NOP 什么也不做,可以调节指令周期的功能的!

赞赏

1

查看全部赞赏

 
个人签名我的邮箱gaoxiaoan123@163.com!回帖是一种美德!互相帮助,共同进步!
口头禅:生活在于创造机会,把握机会!
 

回复

106

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
学了
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

4
 
还是好好看看C语言书吧~~
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

5
 
哈哈,还在使用CCS V2啊
 
 
 

回复

2606

帖子

0

TA的资源

五彩晶圆(初级)

6
 
C语言慢慢学习
 
个人签名工程 = 数学+物理+经济
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表