OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9633|回复: 3

求助原子哥及大虾们:关于keil mdk 4.54硬件仿真问题。

[复制链接]

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2013-8-18
在线时间
8 小时
发表于 2013-8-18 22:42:03 | 显示全部楼层 |阅读模式

原子哥:
    问题描述:我之前用keil mdk(忘记是那个版本了)编写的程序,在程序部分地方用全局变量做一个延时(定时中断里减),当时没有问题。程序如下:
    
delay_time=DataTime1s;     //(DataTime1s是常量 0x01f4);   
    while(delay_time);        //定时中断里delay_time会减一;一直到0


现在我用keil mdk 4.53/4.54两个版本都有同一个问题。就是不能够退出的死循环while(delay_time);但是查看变量delay_time已经等于0了,
后来我又改成如下部分:
    delay_time=DataTime1s;
    while(1)
    {
     temp_asdx=delay_time;
     if(temp_asdx==0x00)
       break;
     else
       temp_asdx++;
      }

注:temp_asdx是局部变量。

发现在delay_time=DataTime1s后, (DataTime1s是常量 =0x01f4);  
在循环里执行 temp_asdx=delay_time后,temp_asdx一直不变,等于DataTime1s(常量 =0x01f4);
在程序里,明明delay_time=0x00了,但执行temp_asdx=delay_time后,temp_asdx还是等于DataTime1s(常量 =0x01f4);

仿真环境:stm32f103,JLink v8 

不知道是什么原因?望知道的大虾指点下。小弟先谢谢了。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-18 23:23:57 | 显示全部楼层
在delay_time申明的时候,前面加上violate试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2013-8-18
在线时间
8 小时
 楼主| 发表于 2013-8-18 23:47:07 | 显示全部楼层
问题解决,谢谢原子哥!

那还有个问题:为什么之前的版本不用加没有问题,后面的就要加volatile,那是不是全部的全局变量都要加volatile 关键字?
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2013-8-18
在线时间
8 小时
 楼主| 发表于 2013-8-19 00:05:42 | 显示全部楼层
在网上找相关的知识看了下,对C的基础知识都不熟悉,学技不精啊。为了这个问题,折磨了老半天,惭愧惭愧!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-14 22:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表