打印
[ZLG-ARM]

调试EASYARM2200碰到的问题

[复制链接]
1603|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kolo|  楼主 | 2008-8-29 13:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uint8 uc1s=0,ucwork0=0,ucwork1=0,ucwork2=0,ucwork3=0,ucwork4=0,ucwork5=0;
uint16 untickcount1=0;
uint8  uctickcount2=0;

/****************************************************************************
* 名称:IRQ_Time0()
* 功能:定时器0中断服务程序,取反BEEPCON控制口。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void __irq  IRQ_Time0(void)
{  
   untickcount1++;
if(uctickcount2!=0)
   uctickcount2--;
//定时约1秒
if(untickcount1%50==0) uc1s=1;    
//与多任务分配有关,可以分配6个任务,没有抢先机制
//任务之间的交互,依靠外部变量
if(untickcount1%WORK0==0)ucwork0=1;
if(untickcount1%WORK1==0)ucwork1=1;
if(untickcount1%WORK2==0)ucwork2=1;
if(untickcount1%WORK3==0)ucwork3=1;
if(untickcount1%WORK4==0)ucwork4=1;
if(untickcount1%WORK5==0)ucwork5=1;            

T0IR = 0x01;                                // 清除中断标志
VICVectAddr = 0x00;                            // 通知VIC中断处理结束

}
/***************************************
** 函数名称: delay,外部调用
** 功能描述: 延时程序,延时量为a*0.02s
** 输 入: 延时量a
** 输 出: 无
** 全局变量: uctickcount2
***************************************/
/*void delay(uint8 a)
{
   uctickcount2=a;
   while(uctickcount2!=0);
}*/
/****************************************************************************
* 名称:DelayNS()
* 功能:长软件延时
* 入口参数:dly        延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  delay(uint32  dly)
{  uint32  i;

   for(; dly>0; dly--) 
      for(i=0; i<5000; i++);
}

相关帖子

沙发
kolo|  楼主 | 2008-8-29 13:45 | 只看该作者

延时程序delay

使用uctickcount2的延时程序delay,会造成死机

使用特权

评论回复
板凳
QAWSDEDR| | 2008-8-29 21:48 | 只看该作者

没有减一操作!

while(uctickcount2!=0);

uctickcount2这个变量如果不减,永远不可能等于0,明白?

使用特权

评论回复
地板
armecos| | 2008-9-2 00:35 | 只看该作者

EASYARM2200上有现成的中断测试程序,

万能中断模板,见《ecos中断》文档,里面有中断ISR源码。www.armecos.com上下载。
volatile的作用你用汇编调试就能看出加与不加效果有何不同。

更多内容,详见:
《培训系列“丛书”》
www.armecos.com
-----------------------------------
More details, see:
《"Series Books" of Training》
www.armecos.com

使用特权

评论回复
5
zlg_lly| | 2008-9-2 08:37 | 只看该作者

re:kolo

你好,建议你将对uctickcount2的定义
uint8  uctickcount2=0;改为
volatile uint8 uctickcount2=0;

volatile关键字用它声明的类型变量表示可以被某些编译器未知的因素更改,例如:中断。。。。。

更多关于volatile的知识你可以上网查询。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

54

帖子

1

粉丝