[ZLG-ARM] 调试EASYARM2200碰到的问题

[复制链接]
2430|5
 楼主| kolo 发表于 2008-8-29 13:42 | 显示全部楼层 |阅读模式
uint8&nbsp;uc1s=0,ucwork0=0,ucwork1=0,ucwork2=0,ucwork3=0,ucwork4=0,ucwork5=0;<br />uint16&nbsp;untickcount1=0;<br />uint8&nbsp;&nbsp;uctickcount2=0;<br /><br />/****************************************************************************<br />*&nbsp;名称:IRQ_Time0()<br />*&nbsp;功能:定时器0中断服务程序,取反BEEPCON控制口。<br />*&nbsp;入口参数:无<br />*&nbsp;出口参数:无<br />****************************************************************************/<br />void&nbsp;__irq&nbsp;&nbsp;IRQ_Time0(void)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;untickcount1++;<br />if(uctickcount2!=0)<br />&nbsp;&nbsp;&nbsp;uctickcount2--;<br />//定时约1秒<br />if(untickcount1%50==0)&nbsp;uc1s=1;&nbsp;&nbsp;&nbsp;&nbsp;<br />//与多任务分配有关,可以分配6个任务,没有抢先机制<br />//任务之间的交互,依靠外部变量<br />if(untickcount1%WORK0==0)ucwork0=1;<br />if(untickcount1%WORK1==0)ucwork1=1;<br />if(untickcount1%WORK2==0)ucwork2=1;<br />if(untickcount1%WORK3==0)ucwork3=1;<br />if(untickcount1%WORK4==0)ucwork4=1;<br />if(untickcount1%WORK5==0)ucwork5=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />T0IR&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;清除中断标志<br />VICVectAddr&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;通知VIC中断处理结束<br /><br />}<br />/***************************************<br />**&nbsp;函数名称:&nbsp;delay,外部调用<br />**&nbsp;功能描述:&nbsp;延时程序,延时量为a*0.02s<br />**&nbsp;输 入:&nbsp;延时量a<br />**&nbsp;输 出:&nbsp;无<br />**&nbsp;全局变量:&nbsp;uctickcount2<br />***************************************/<br />/*void&nbsp;delay(uint8&nbsp;a)<br />{<br />&nbsp;&nbsp;&nbsp;uctickcount2=a;<br />&nbsp;&nbsp;&nbsp;while(uctickcount2!=0);<br />}*/<br />/****************************************************************************<br />*&nbsp;名称:DelayNS()<br />*&nbsp;功能:长软件延时<br />*&nbsp;入口参数:dly&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;延时参数,值越大,延时越久<br />*&nbsp;出口参数:无<br />****************************************************************************/<br />void&nbsp;&nbsp;delay(uint32&nbsp;&nbsp;dly)<br />{&nbsp;&nbsp;uint32&nbsp;&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;for(;&nbsp;dly&gt0;&nbsp;dly--)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt5000;&nbsp;i++);<br />}
 楼主| kolo 发表于 2008-8-29 13:45 | 显示全部楼层

延时程序delay

使用uctickcount2的延时程序delay,会造成死机
QAWSDEDR 发表于 2008-8-29 21:48 | 显示全部楼层

没有减一操作!

while(uctickcount2!=0);<br /><br />uctickcount2这个变量如果不减,永远不可能等于0,明白?<br />
armecos 发表于 2008-9-2 00:35 | 显示全部楼层

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

万能中断模板,见《ecos中断》文档,里面有中断ISR源码。www.armecos.com上下载。<br />volatile的作用你用汇编调试就能看出加与不加效果有何不同。<br /><br /><b>更多内容,详见:</b><br /><b>《培训系列“丛书”》</b><br /><b>www.armecos.com</b><br />-----------------------------------<br /><b>More&nbsp;details,&nbsp;see:</b><br /><b>《&quot;Series&nbsp;Books&quot;&nbsp;of&nbsp;Training》</b><br /><b>www.armecos.com</b>
zlg_lly 发表于 2008-9-2 08:37 | 显示全部楼层

re:kolo

你好,建议你将对uctickcount2的定义<br />uint8&nbsp;&nbsp;uctickcount2=0;改为<br />volatile&nbsp;uint8&nbsp;uctickcount2=0;<br /><br />volatile关键字用它声明的类型变量表示可以被某些编译器未知的因素更改,例如:中断。。。。。<br /><br />更多关于volatile的知识你可以上网查询。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

54

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部