6020|10

82

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【STVD+COSMIC】编译超奇怪的问题 [复制链接]

来段代码先:

  1. u16 tempqq;
  2. //初始化USRT (9600,8,n,1)
  3. void UARTInit(void)
  4. {
  5. u8 dummy = 0;//初始化串口使用的临时变量
  6.     dummy = UART1->SR;
  7.     dummy = UART1->DR;
  8. //使用内部高速时钟HSI 16MHz 波特率9600 UART_DIV = 16000000/9600 = 0683H
  9.     UART1->BRR2 = 0x03;  
  10.     UART1->BRR1 = 0x68;      /*< Set Baud rate = 9600 @16MHz */
  11.     UART1->CR1 = UART1_CR1_RESET_VALUE; /*< Set UART1_CR1 to reset value 0x00  */
  12.     UART1->CR2 = 0x0c;      /*< Set UART1 T/R enable      */
  13.     UART1->CR3 = UART1_CR3_RESET_VALUE; /*< Set UART1_CR3 to reset value 0x00  */
  14.     UART1->CR4 = UART1_CR4_RESET_VALUE; /*< Set UART1_CR4 to reset value 0x00  */
  15.     UART1->CR5 = UART1_CR5_RESET_VALUE; /*< Set UART1_CR5 to reset value 0x00  */
  16.     UART1->GTR = UART1_GTR_RESET_VALUE;
  17.     UART1->PSCR = UART1_PSCR_RESET_VALUE;
  18. }


  19. void main(void)
  20. {
  21. CLKInit();//时钟初始化
  22. GPIOInit();//端口初始化
  23. UARTInit();//UART1初始化
  24. tempqq = 10000;
  25. while(tempqq--);//<--------------注意这里,这时,编译器那个忙啊.....

  26. enableInterrupts();
  27. while (1)
  28. {
  29. }
复制代码

在main中,
while(tempqq--);//<--------------注意这里,这时,编译器那个忙啊.....
然而,把这个循环放到UART1初始化代码中或UART1初始化代码前面就可以顺利编译.
此帖出自stm32/stm8论坛

最新回复

                                 LS,C的语法规则就确定了不会产生歧义的,编译器的产生的语句必须是先执行判断,然后再减1 这样的写法再正常不过,编译器根本就不可能糊涂的。 说的好  详情 回复 发表于 2009-12-4 22:10
点赞 关注
 

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
测试了一下,没见你说的什么忙!!!

char a=1;
char b=2;
char c=3;
char d @0xfe ;
main()
{
while(1){
                                d=0x55;
                          while(d--){
                                                                        a=0xaa;
                                                                        }
        }
}
此帖出自stm32/stm8论坛
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
编译器我用的感觉很别扭。
可能是还不太熟悉。
一会好用一会不好用。
编译出错后,再就恢复不到以前的状态。
此帖出自stm32/stm8论坛
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

4
 

RE: 2楼

To


你没有看清我说的内容, 我的代码是在UART初始化之后出现的问题
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
编译器怎么个忙法?

编译时间很长?!
此帖出自stm32/stm8论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

6
 

Re:5楼



就是编译假死。
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

7
 
就是编译假死???
第一次听说。是不是优化 或者 死循环了?
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 
  1. //按上面的例子

  2. //u8定义的tempqq,
  3. while(tempqq--); //也能通过

  4. u16定义的tempqq,
  5. while(tempqq--); //未必能通过
  6. while(--tempqq);//就能通过
复制代码
有高人给出合理解释吗?
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
俺不是高人,俺觉得 while(tempqq--); 这样的写法让人有点迷糊,究竟是先--再while还是先while再--,可能编译器也糊涂了吧。
如果这样写 while(tempqq) tempqq--; 会不会清晰一点。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

10
 


LS,C的语法规则就确定了不会产生歧义的,编译器的产生的语句必须是先执行判断,然后再减1

这样的写法再正常不过,编译器根本就不可能糊涂的。
此帖出自stm32/stm8论坛
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(初级)

11
 
LS,C的语法规则就确定了不会产生歧义的,编译器的产生的语句必须是先执行判断,然后再减1

这样的写法再正常不过,编译器根本就不可能糊涂的。
说的好
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表